[英]bug in g++ std::strtod function when used in Qt project?
我使用從 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。 為什么?
在調試版本中它工作正常。 類似的非 Qt 項目工作正常。
我找到了解決方案。
QApplication 類的構造函數更改本地化。 它執行該行
setlocale(LC_ALL, "");
然后十進制字符不再點。 一種解決方案是使用 Qt 的轉換函數,例如 QString::toDouble()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.