Ich habe ein Qt-Projekt gestartet und mit C++ - Code verbunden, den ich geschrieben habe, um eine Datei zu parsen. Dieser Code verwendet std :: stod(), um double-Werte zu analysieren, und funktioniert in einem einfachen C++ - Projekt, aber bei Verwendung mit einer Qt-Anwendung gibt std :: stod() nur den ganzzahligen Teil der Zahl zurück.Andere Werte von std :: stod() und QString :: toDouble() in Qt5 erhalten
Ich schrieb und lief einige Test-Code, einer mit g ++ 6.1 kompiliert, und der andere mit qmake 5.6 und der gleichen g ++. Die Ergebnisse sind die gleichen wie die Ergebnisse meiner Projekte.
Code mit g ++ kompiliert:
#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;
}
Es zeigt den guten Wert: 3.14
Code mit Qt kompiliert:
#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();
}
Können Sie mir sagen, warum std :: stod() verhält sich so?
Wow, daran hätte ich nie gedacht ... Ich habe es in der Dokumentation gelesen, aber ich hätte nie gedacht, dass die Zahlenformate so unterschiedlich sein können. Was sollte ich anstelle von Stod verwenden? – Shumush
Nun, unter welchem (numerischen) Gebietsschema sind Sie? Unter den meisten europäischen/russischen/südamerikanischen Gebietsschemas ist das Dezimaltrennzeichen ein Komma (','), kein Punkt ('.'), Z. '3,14'. – peppe
Es gibt keine andere Lösung als die eigene 'strtod' /' atof' Implementierung, Sie können Rubys oder FreeBSDs verwenden. – peppe