2

Windows の地域設定 (ポルトガル語) では、小数点記号としてコンマを使用しています。また、開発したすべてのプログラムでは、文字列をフォーマットしたり、atof.

ただし、私の手に渡ったこの特定のプログラムは、地域の設定に関係なく、小数点としてドットを使用することを主張しています。

私はsetlocaleプログラムのどこにも電話していませんし、他の言語変更機能についても知りません。InitInstance()実際、これらのコード行を関数の最初に置きました。

double var = atof("4,87");
TRACE("%f", fDecimal);

これは4.000000、このプログラムと4,870000他のすべてのプログラムで生成されます。

プロジェクトのプロパティに間違った設定があるに違いないと思いますが、それが何であるかわかりません。誰でも助けることができますか?

4

2 に答える 2

3

プログラムやその他の言語変更関数AFAIKのどこでもsetlocaleを呼び出していません。

それが理由です。CおよびC++のデフォルトは「C」ロケールです。ロケールを「」に設定してみてください。setlocale(LC_ALL,"");

于 2011-02-22T17:34:04.670 に答える
1

atof予想される小数点記号の決定に関しては、C ロケールに依存しています。したがって、別のメンバーが言及したようにsetlocale(LC_NUMERIC, "");、C ロケールを数値関連機能のユーザー ロケール (地域設定) に設定します。使用可能なフラグとロケール名の詳細については、 MSDN ページを参照してください。

C ロケールを変更したくない場合atof_lは、標準の代わりに使用して、 (名前)atolで作成されたロケール構造を提供できます。_create_locale

double _atof_l(const char *str, _locale_t locale);

多数の代替手段があります。たとえば、何か問題が発生した場合に通知されるため、IMHO のより良いオプションであるstrtod(およびその Windowsの対応物) を使用できます。strtod_l

于 2013-09-29T09:01:23.173 に答える