要转换和格式化的字符串

时间:2013-08-31 06:07:46

标签: c++ qt qtcore

目前我有类似的东西

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

现在浮动是2.3690000031 ..

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

3 个答案:

答案 0 :(得分:5)

(已被多次询问和解释。)2.37无法获得float。无法在2.37中获得double。在任何IEEE-754样式的二进制浮点格式中都不可能得到2.372.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