我有两个使用相同库的示例应用程序,它们之间的主要区别是一个使用qt,另一个应用程序是控制台应用程序。
在公共库中,我有以下测试代码:
double test = 0.1;
double test2 = atof("2.13134");
double test3 = atof("1,12345");如果使用非qt应用程序,则值为:
test = 0.10000000000001
test2 = 2.1323399999999999998
test3 = 1 // This is the expected result using a ',' as delimitation character但在qt应用程序中:
test = 0.10000000000001
test2 = 2 // This is not expected!!!
test3 = 1.1234500000000000001有没有因为qt而“atof”的行为发生变化的情况?
发布于 2016-02-09 15:02:21
std::atof依赖于当前设置的区域设置来告诉它哪个字符是小数点。在默认情况下("C语言环境“),即句点字符'.‘。
Qt很可能正在将区域设置为其他的东西。您可以使用标准C[++]机构将其还原
std::setlocale(LC_ALL, "C");发布于 2016-02-09 14:58:46
您注意到的问题很可能是由Qt的区域设置概念引起的。您可以使用:
QLocale::setDefault(QLocale::C);让它像atof一样工作。
更新
QLocale::setDefault似乎没有设置Qt使用的默认区域设置。它只设置在构造QLocale时将创建的默认区域设置。有关更多信息,请参见在Qt中更改区域设置和公认的答案。
https://stackoverflow.com/questions/35295052
复制相似问题