繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM