Преобразование и форматирование строки в плавающее число

В настоящее время у меня есть что-то вроде этого

float a = SomeQString.toFloat(); //QString has 2.37

Теперь число с плавающей точкой 2.3690000031 ..

Что я хочу, это 2.3700000000 .. какие-либо предложения о том, как я мог бы сделать это? Кроме того, почему я получаю 2,369 вместо 2,37?

0

Решение

(Был спрошен и объяснен так много раз.) Невозможно получить 2.37 в float, Не возможно получить 2.37 в double, Не возможно получить 2.37 в любом двоичном формате с плавающей точкой в ​​стиле IEEE-754. 2.37 не представляется точно в таких двоичных форматах с плавающей точкой.

Читать Что каждый компьютерщик должен знать об арифметике с плавающей точкой

Один жизнеспособный способ «получить» 2.37 на самом деле хранить это 2.369... в float (что вы уже делаете), а затем округлите его до 2.37 в то время, когда вам нужно будет сгенерировать десятичное представление, то есть в то время, когда вам нужно представить / вывести значение пользователю.

5

Другие решения

#include <string>
#include <sstream>

int main(void)
{
std::string QString = "2.37";
std::istringstream StrToFloat(QString );
float floatVar;
StrToFloat >> floatVar;

return 0;
}
2

Если вы настаиваете на использовании Qt, этот код вам подходит:

#include <QString>
#include <QTextStream>
#include <QDebug>

using namespace std;

int main()
{
QString floatString = "2.37";
QTextStream floatTextStream(&floatString);
float f;
floatTextStream >> f;
qDebug() << f;

return 0;
}

Запустите следующую команду, например, с gcc и Qt 5 (или чем-то похожим, если у вас другой сценарий):

Команда: g++ -I/usr/include/qt -I/usr/include/qt/QtCore -lQt5Core -fPIC main.cpp && ./a.out

Выход: 2.37

Тем не менее, вам не нужно QString для этого. Смотрите код ниже, который генерирует вывод 2.37 как и ожидалось.

#include <string>
#include <sstream>
#include <iostream>

using namespace std;

int main()
{
string floatString = "2.37";
istringstream floatStringStream(floatString);
float f;
floatStringStream >> f;
cout << f;

return 0;
}

Запустите следующую команду с gcc, например (или что-то подобное, если у вас другой сценарий):

Команда: g++ main.cpp && ./a.out

Выход: 2.37

0
По вопросам рекламы [email protected]