在Qt项目中使用g ++ std :: strtod函数时的错误?

时间:2018-09-24 16:23:59

标签: c++ qt g++

我使用从16.04升级的64位ubuntu 18.04。

制作QWidget项目,将标签放在MainWindow上,然后将mainwindow.cpp更改为

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow) {
  ui->setupUi(this);
  std::cout << strtod("3.5", 0) << std::endl;
}

MainWindow::~MainWindow() { delete ui; }

有两行新内容

#include <iostream>

  std::cout << strtod("3.5", 0) << std::endl;

其他所有内容都保持不变。

构建发行版并运行。控制台上的结果将为3,这是不正确的。正确值为3.5。为什么?

在Debug版本中,它可以正常工作。 Simmilar非Qt项目效果很好。

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。

QApplication类的构造函数更改了本地化。它执行该行

setlocale(LC_ALL, "");

然后十进制字符不能再长一点。解决方案之一是使用Qt的转换函数,例如QString :: toDouble()。