Shu*_*ush 1 floating-point double qt c++11
我启动了一个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;
}
Run Code Online (Sandbox Code Playgroud)
它显示了良好的价值: 3.14
用Qt编译的代码:
#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();
}
Run Code Online (Sandbox Code Playgroud)
你能告诉我为什么std :: stod()表现得像这样吗?
因为 std::stod 破碎无法修复,应该在地狱中燃烧是根据当前的语言环境来std::strtod解释双打的.QString总是使用C语言环境(使用QLocale进行特定于语言环境的转换).
创建QCoreApplication实例会导致调用setlocale(LC_ALL, ""),该调用根据环境设置进程的语言环境,从而改变std::stod行为.
| 归档时间: |
|
| 查看次数: |
376 次 |
| 最近记录: |