const char *用C ++加倍翻译问题

时间:2016-02-09 14:51:08

标签: c++ qt atof

我有两个使用相同库的示例应用程序,它们之间的主要区别在于一个使用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

有没有'atof'的行为发生变化,因为qt?

2 个答案:

答案 0 :(得分:7)

std::atof取决于当前设置的语言环境,以告诉它哪个字符是小数点。在默认情况下(" C语言环境"),这是句点字符' .'。

Qt可能会将语言环境设置为其他内容。您可以使用standard C[++] mechanism

还原
std::setlocale(LC_ALL, "C");

答案 1 :(得分:4)

您注意到的问题很可能是由Qt的语言环境概念引起的。您可以使用:

QLocale::setDefault(QLocale::C);

使其像atof一样工作。

<强>更新

似乎QLocale::setDefault没有设置Qt使用的默认语言环境。它仅设置在构造QLocale时将创建的默认语言环境。有关详细信息,请参阅Changing locale in Qt和接受的答案。