2

目前我有这样的东西

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

现在浮点数是 2.3690000031..

我想要的是 2.3700000000 .. 关于我如何做到这一点的任何建议?另外为什么我得到 2.369 而不是 2.37?

4

3 回答 3

5

(已被询问和解释了很多次。)不可能2.37进入float. 是不可能进入2.37double。不可能获得2.37任何 IEEE-754 样式的二进制浮点格式。2.37不能以这种二进制浮点格式精确表示。

阅读每位计算机科学家应了解的浮点运算知识

“获取”2.37的一种可行方法实际上是将其存储2.369...在 a 中float(这是您已经做的),然后将其四舍五入到2.37您需要生成十进制表示的时间,即您必须呈现的时间/输出值给用户。

于 2013-08-31T06:20:01.623 回答
2
#include <string>
#include <sstream>

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

    return 0;
}
于 2013-08-31T06:17:12.297 回答
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

于 2013-08-31T06:22:04.840 回答