目前我有这样的东西
float a = SomeQString.toFloat(); //QString has 2.37
现在浮点数是 2.3690000031..
我想要的是 2.3700000000 .. 关于我如何做到这一点的任何建议?另外为什么我得到 2.369 而不是 2.37?
(已被询问和解释了很多次。)不可能2.37
进入float
. 是不可能进入2.37
的double
。不可能获得2.37
任何 IEEE-754 样式的二进制浮点格式。2.37
不能以这种二进制浮点格式精确表示。
“获取”2.37
的一种可行方法实际上是将其存储2.369...
在 a 中float
(这是您已经做的),然后将其四舍五入到2.37
您需要生成十进制表示的时间,即您必须呈现的时间/输出值给用户。
#include <string>
#include <sstream>
int main(void)
{
std::string QString = "2.37";
std::istringstream StrToFloat(QString );
float floatVar;
StrToFloat >> floatVar;
return 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