2

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

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

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

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

4.000000会在这个程序和4,870000其他所有程序中产生。

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

4

2 回答 2

3

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

那就是为什么。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);

有很多选择。例如,您可以使用strtod(及其 Windowsstrtod_l对应项),恕我直言,这是一个更好的选择,因为它会让您知道是否发生了错误。

于 2013-09-29T09:01:23.173 回答