我用qt creator创建了一个qt应用程序,代码就像,
#include "mainwindow.h"
#include <QDebug>
#include <QApplication>
#include <stdlib.h>
int main(int argc, char *argv[])
{
double before = atof("3.1");
double x;
sscanf("3.1", "%lf", &x);
QApplication a(argc, argv);
double after = atof("3.1");
double y;
sscanf("3.1", "%lf", &y);
MainWindow w;
w.show();
qDebug() << before;
qDebug() << after;
qDebug() << x;
qDebug() << y;
return a.exec();
}
输出
3.1
3
3.1
3
这意味着sscanf和atof在“QApplication a(argc,argv);”之后截断小数部分。问题只出现在Linux Mint 17下的Qt5.3中。我在Windows 8和Mac OS 10.9中测试了相同的程序,它们没有相同的问题。它是Linux Qt5.3中的一个错误还是与linux c库有关?
可以访问完整的代码here
答案 0 :(得分:1)
请参阅QCoreApplication documentation:
在Unix / Linux上,Qt配置为使用系统区域设置 默认。这可能会导致使用POSIX函数时发生冲突 例如,在浮点数等数据类型之间进行转换时 字符串,因为区域设置之间的符号可能不同。到处走走 这个问题,调用POSIX函数setlocale(LC_NUMERIC,“C”)吧 初始化QApplication或QCoreApplication后重置 用于数字格式化为“C”-locale的区域设置。
我可以重现您的问题,以下代码为我修复了它:
QApplication a(argc, argv);
setlocale(LC_NUMERIC,"C");