QVector2D/QVector3D数值异常:输入与输出值不符的原因?
数值偏差原因及解决方案
这是因为QVector3D默认使用单精度浮点数(float)存储数据,你传入的十进制数值精度超过了float的表示能力,导致存储时发生了舍入误差。
具体细节:
- float是32位浮点数,尾数部分仅能提供约7-8位的十进制有效数字。
- 第一个数值
858727.182:整数部分占6位,剩余有效位数不足以精确表示小数点后的0.182,因此被舍入到float能表示的最接近值858727.1875。 - 第二个数值
40591545264.7:整数部分已有11位,远超float的有效数字上限,存储时只能保留前7-8位有效数字,后续位数被截断/舍入,最终得到40591544320。
解决办法:
如果需要更高精度的存储,改用Qt提供的双精度版本QVector3Dd(内部存储double类型,64位浮点数,约15-17位十进制有效数字),代码修改如下:
QVector3Dd p2(858727.182, 40591545264.7, 0); qDebug() << QString::number(p2.x(), 'g', 12);
此时输出会更接近你输入的原始数值。
内容的提问来源于stack exchange,提问作者Hunk
相关产品推荐
相关产品推荐

