我启动了一个Qt项目并将其链接到我编写的一些C ++代码来解析文件。这段代码使用std :: stod()来解析double值,并且在普通的c ++项目中工作正常,但是当与Qt应用程序一起使用时,std :: stod()只返回数字的整数部分。
我编写并运行了一些测试代码,一个用g ++ 6.1编译,另一个用qmake 5.6和相同的g ++编写。结果与我的项目结果相同。
使用g ++编译的代码:
#include <iostream>
int main(int argc, char ** argv)
{
const std::string number("3.14");
double dbl = std::stod(number);
std::cout << dbl << '\n'; // 3.14
return 0;
}
它显示了良好的价值:3.14
#include <QCoreApplication>
#include <QDebug>
#include <iostream>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
const std::string snumber("3.14");
const QString qnumber = QString::fromStdString("3.14");
double std_d = std::stod(snumber);
double qt_d = qnumber.toDouble();
qDebug() << std_d << qt_d; // 3 3.14
std::cout << std_d << ' ' << qt_d << '\n'; // 3 3.14
return a.exec();
}
你能告诉我为什么std :: stod()表现得像这样吗?
答案 0 :(得分:5)
因为std::stod
被破坏而无法修复并且应该在地狱中燃烧是以std::strtod
实现的,它根据当前区域设置解释双精度 。 QString总是使用C语言环境(使用QLocale进行特定于语言环境的转换)。
创建QCoreApplication实例会调用setlocale(LC_ALL, "")
,根据环境设置进程的语言环境,从而改变std::stod
行为。