qDebug()浮点输出问题
2018-03-31 15:36
330 查看
概要
在使用Qt时,通过qDebug()输出浮点数时有机会遇到一个细微错误。 问题在于显示的可能并不完整。
std::cout有相同的问题。
情况可能发生在以下情况:
您有一个
QString对象,它包含一定数量的
8564.26495574,我们使用
toDouble()方法将其转换为浮点数,然后用输出
qDebug()检查结果,但是运气不好,输出不正确。
QString str("8564.26495574"); qDebug() << str.toDouble(); // 输出 -> 8564.26
但实际上我们有绝对正确的数字,也就是从字符串中得到的数字
8564.26495574,但qDebug()显示了舍入结果。
如果您尝试为
qDebug()使用
double,则会观察到同样的情况。
double a = 8564.26495574; qDebug() << a; // 输出 -> 8564.26
使用
bool变量确保将数字从
QString转换为
double时没有发生错误,该变量是作为
toDouble()方法参数传递的指针。
QString str("8564.26495574"); bool ok = false; qDebug() << str.toDouble(&ok); qDebug() << ok; // 我们将得到如下输出 // 8564.26 // true - 也就是说转换成功,那么问题不在转换这步。
解决方法
为了做出正确的输出,我们必须使用QString::arg()方法来指示格式化和精确化的类型。
QString str("8564.26495574"); double a = 8564.26495574; double b = str.toDouble(); qDebug() << QString("%1").arg(a, 0, 'f', 5); qDebug() << QString("%1").arg(a, 0, 'g', 5); qDebug() << QString("%1").arg(a, 0, 'e', 10); qDebug() << QString("%1").arg(a, 0, 'g', 30); qDebug() << QString("%1").arg(b, 0, 'f', 5); qDebug() << QString("%1").arg(b, 0, 'g', 5); qDebug() << QString("%1").arg(b, 0, 'e', 10); qDebug() << QString("%1").arg(b, 0, 'g', 30);
我们将得到如下输出
"8564.26496" "8564.3" "8.5642649557e+3" "8564.26495574000000488013029099" "8564.26496" "8564.3" "8.5642649557e+3" "8564.26495574000000488013029099"
在这两种情况下,我们都可以得到与这里相同的结果,并且这里的数字是相同的。
关于格式化的参数(Qt文档中有详细介绍):
e | format as [-]9.9e[+|-]999 |
---|---|
E | format as [-]9.9E[+|-]999 |
f | format as [-]9.9 |
g | use e or f format, whichever is the most concise |
G | use E or f format, whichever is the most concise |
相关文章推荐
- c++中格式化输出。十六进制浮点数0x p输出问题
- 浮点数的存储及输出问题
- 关于Qt中遇到qDebug输出QString时输出Unicode码问题的解决与总结
- Java中浮点数的输出形式及可能引起的问题
- c语言的printf输出浮点数的一些问题
- VS2010中qDebug输出乱码的问题
- C/C++中浮点数输出格式问题
- 格式化输入输出浮点数据的细微问题(C标准:printf,scanf)
- C++中输出设置有效位和计算机中浮点数的保存问题
- Java中浮点数的输出形式及可能引起的问题
- Qt之qDebug输出转义符反斜杠的问题
- Java中浮点数的输出形式及可能引起的问题
- 1004. 超高精度浮点数的输出问题
- VSS链接VS出现net/输出问题
- 浮点数的舍入问题
- java读取文件输出流出现的问题
- 浮点精度问题
- java 浮点数计算问题
- 输入一个浮点数,并输出该数的整数部分和小数部分
- Linux手机DIY.库文件专题.交叉编译的浮点问题