たくさんの浮動小数点数を含むファイルを読まなければならないとしましょう。数値は1e+10
、5
、-0.15
など、つまり、小数点を使用した任意の一般的な浮動小数点数にすることができます (これは固定されています! )。ただし、私のコードは別のアプリケーションのプラグインであり、現在のロケールを制御することはできません。たとえば、ロシア語である可能性があり、そこでの LC_NUMERIC 規則では、使用する小数点のカンマが必要です。したがって、Pi は「3,1415...」と綴られると予想されます。
sscanf("3.14", "%f", &x);
「1」を返し、「.」以降の解析を拒否するため、x には「3.0」が含まれます。文字列で。
このような数値解析タスクでは、ロケールを無視する必要があります。
どうやってそれを行うのですか?
parseFloat 関数を書くこともできましたが、これはもったいないようです。
また、現在のロケールを保存し、一時的に「C」にリセットし、ファイルを読み取り、保存されたものに復元することもできました。これのパフォーマンスへの影響は何ですか?一部の OS/libc コンボでは setlocale() が非常に遅くなる可能性があります。
さらに別の方法として iostream を使用することもできますが、やはりパフォーマンスは優れたものではありません。
だから私は困惑しています。そんな時、皆さんはどうしていますか?
乾杯!