mfc程序使用错误的小数分隔符/语言

我在Windows区域设置(葡萄牙语)中使用逗号作为小数分隔符,我开发的所有程序在格式化字符串或使用
atof
时都使用逗号。 然而,无论我的区域设置如何,我手中的这个特殊程序都坚持使用点作为小数点分隔符。 我不是在程序中的任何地方调用
setlocale
或任何其他语言更改功能AFAIK。实际上我把这些代码行放在了
InitInstance()
函数的最开头:
double var = atof("4,87");
TRACE("%f", fDecimal);
这个程序产生
4.000000
,而另外一个产生
4,870000
。 我认为项目属性中必定存在一些错位设置,但我不知道它是什么。有人可以帮忙吗?     
已邀请:
我不是在程序中的任何地方调用setlocale或任何其他语言更改功能AFAIK。 那就是原因。 C和C ++默认为“C”语言环境。尝试将语言环境设置为“”:
setlocale(LC_ALL,"");
    
在确定预期的小数分隔符时,
atof
依赖于C语言环境。因此,正如另一个成员所提到的,
setlocale(LC_NUMERIC, "");
会将C语言环境设置为与数字相关的函数的用户区域设置(区域设置)。有关可用标志和区域设置名称的更多信息,请参阅MSDN页面。 对于那些不想更改C语言环境的人,可以使用
atof_l
而不是标准
atol
,并为其提供使用
_create_locale
(名称)创建的语言环境结构。
double _atof_l(const char *str, _locale_t locale);
有很多选择。例如,你可以使用
strtod
(以及它的Windows
strtod_l
对应物),这是一个更好的选择,因为它会让你知道是否发生了错误。     

要回复问题请先登录注册