此行是否正常: self-> _latitude = 42.639914;
在分配后立即在运行期间产生此结果? _latitude double 42.639913999999997
我很困惑。我认为只有在计算东西时才会出现浮点精度误差。为什么要在分配时创建不同的值?
答案 0 :(得分:2)
将小数部分转换为二进制浮点数是可能需要舍入的非平凡计算。
最接近的64位二进制IEEE 754编号为42.639914,为42.63991399999999742931322543881833553314208984375,因此在这种情况下需要进行舍入。
输出也是四舍五入的。如果只查看输入和舍入输出,则无法知道从十进制到二进制浮点的转换有多少舍入误差,以及输出转换的多少。上面的确切值是将输入到后续计算的值。
您可以使用可以精确转换为十进制的函数或者使用诸如Exploring Binary Decimal to Floating-Point converter之类的Web转换器来自行探索。