[英]mfc program using wrong decimal separator/language
我在Windows区域设置(葡萄牙语)中使用逗号作为小数点分隔符,并且在格式化字符串或使用atof
时,我开发的所有程序都使用逗号。
但是,不管我的区域设置如何,我遇到的这个特殊程序都坚持使用点作为小数点分隔符。
我没有在程序中的任何地方或任何其他更改语言的函数AFAIK中调用setlocale
。 实际上,我将这些代码行放在InitInstance()
函数的开头:
double var = atof("4,87");
TRACE("%f", fDecimal);
在此程序中,这将产生4.000000
,而在其他程序4,870000
产生4,870000
。
我认为项目的属性中肯定有一些放错地方的设置,但是我不知道它是什么。 有人可以帮忙吗?
那就是为什么。 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
对应项),这是恕我直言的更好选择,因为它会在发生错误时通知您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.