我有这样的部门:
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
任何解决方案?如何以这种方式格式化?
documentation非常清楚您应该做什么:
还使用参数格式指定精度。对于“ e”,“ E”和“ f”格式,精度表示小数点后的位数。对于'g'和'G'格式,精度表示最大有效位数(省略零位)。
因此,请使用'g'或'G'格式。
#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;
}
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
qmake && make && ./main
"96.4"
"96.55"
这将始终以固定(非科学)表示形式返回格式化的数字,并且效率相当高:
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);
}