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

时间:2011-02-22 16:57:50

标签: c++ mfc decimal-point

我在Windows区域设置(葡萄牙语)中将逗号作为小数点分隔符,我开发的所有程序在格式化字符串或使用atof时都使用逗号。

然而,无论我的区域设置如何,我手中的这个特殊程序都坚持使用点作为小数点分隔符。

我没有在程序中的任何地方调用setlocale或任何其他语言更改功能AFAIK。实际上,我将这些代码行放在InitInstance()函数的最开头:

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

这会在此计划中产生4.000000,在其他每个程序中产生4,870000

我认为项目的属性中必定存在一些错位的设置,但我不知道它是什么。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

我没有在程序中的任何地方调用setlocale或任何其他语言更改功能AFAIK。

这就是原因。 C和C ++默认为“C”语言环境。尝试将区域设置设置为“”:setlocale(LC_ALL,"");

答案 1 :(得分:1)

在确定预期的小数分隔符时,

atof依赖于C语言环境。因此,正如另一个成员所提到的,setlocale(LC_NUMERIC, "");将C语言环境设置为与数字相关的函数的用户区域设置(区域设置)。有关可用标志和区域设置名称的更多信息,请参阅MSDN page

对于那些不想更改C语言环境的人,可以使用atof_l代替标准atol,并为其提供使用_create_locale创建的语言环境结构(名称如何) )。

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

有很多选择。例如,你可以使用strtod(和它的Windows strtod_l对应物),这是一个更好的选择,因为它会让你知道是否发生了错误。