在QApplication之后,atof截断小数部分

时间:2014-06-13 08:32:01

标签: linux qt atof

我用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

1 个答案:

答案 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");