目前我有类似的东西
float a = SomeQString.toFloat(); //QString has 2.37
现在浮动是2.3690000031 ..
我想要的是2.3700000000 ..有关我如何做到这一点的任何建议?另外我为什么得到2.369而不是2.37?
答案 0 :(得分:5)
(已被多次询问和解释。)2.37
无法获得float
。无法在2.37
中获得double
。在任何IEEE-754样式的二进制浮点格式中都不可能得到2.37
。 2.37
不能用这种二进制浮点格式表示。
阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic
“获取”2.37
的一种可行方法实际上是将2.369...
存储在float
(您已经这样做了)中,然后将其四舍五入为2.37
在您需要生成十进制表示时,即在您必须向用户显示/输出值时。
答案 1 :(得分:2)
#include <string>
#include <sstream>
int main(void)
{
std::string QString = "2.37";
std::istringstream StrToFloat(QString );
float floatVar;
StrToFloat >> floatVar;
return 0;
}
答案 2 :(得分:0)
如果您坚持使用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