Nea*_*iel 15 c++ precision qstring qt qtcore
我有这样一个部门:
number / 1000.0
Run Code Online (Sandbox Code Playgroud)
有时它会给出96.0000000001这样的答案,有时候除法会按预期运行.
我想将我的数字限制为最多两个小数位并且没有尾随零.
如果它是96.5500000001它应该显示96.55.
如果是96.4000000001则应显示96.4
可以用这种方式格式化字符串吗?
我检查了文档,它提供了'f'参数来指定小数位数,但这样尾随的零保持不变.这是我尝试过的:
QString::number(number / 1000.0, 'f', 2)
Run Code Online (Sandbox Code Playgroud)
但这给了我96.4000000001 - > 96.40而不是96.4
有解决方案吗 我怎样才能以这种方式格式化?
lpa*_*app 16
该文件是你应该做的事情非常清楚:
还使用参数格式指定精度.对于'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;
}
Run Code Online (Sandbox Code Playgroud)
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
Run Code Online (Sandbox Code Playgroud)
qmake && make && ./main
Run Code Online (Sandbox Code Playgroud)
"96.4"
"96.55"
Run Code Online (Sandbox Code Playgroud)
这始终以固定(非科学)表示法返回格式化数字,并且相当有效:
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);
}
Run Code Online (Sandbox Code Playgroud)