QString:最多2个小数位的数字,不带尾随零

时间:2014-07-22 08:49:52

标签: c++ qt precision qstring qtcore

我有一个这样的部门:

number / 1000.0

有时会给出96.0000000001之类的答案,有时候除法会按预期运作。

我想将我的号码限制为最多两个小数位且没有尾随零。

如果 96.5500000001 ,则应显示 96.55

如果 96.4000000001 ,则应显示 96.4

可以用这种方式格式化字符串吗?

我检查了文档,它提供了'f'参数来指定小数位数,但这样尾随的零保持不变。 这就是我的尝试:

QString::number(number / 1000.0, 'f', 2)

但是这给了我 96.4000000001 - > 96.40 而不是 96.4

任何解决方案?我怎样才能这样格式化?

2 个答案:

答案 0 :(得分:13)

documentation非常明确你应该做什么:

  

还使用参数格式指定精度。对于' E' E'和' f'格式,精度表示小数点后的位数。对于''和' G'格式,精度表示最大有效位数(省略尾随零)。

因此,请使用''或者' G'格式。

的main.cpp

#include <QString>
#include <QDebug>

int main()
{
    qDebug() << QString::number(96400.0000001 / 1000.0, 'g', 5);
    qDebug() << QString::number(96550.0000001 / 1000.0, 'G', 5);
    return 0;
}

main.pro

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp

构建并运行

qmake && make && ./main

输出

"96.4"
"96.55"

答案 1 :(得分:4)

这将始终以固定(非科学)表示形式返回格式化数字,并且效率相当高:

QString variableFormat(qreal n) { // assumes max precision of 2
    int i = rint(n * 100.0);
    if (i % 100)
        return QString::number(n, 'f', i % 10 ? 2 : 1);
    else
        return QString::number(i / 100);
}