Objective C双重赋值错误

时间:2016-01-12 00:27:29

标签: objective-c double precision

此行是否正常: self-> _latitude = 42.639914;

在分配后立即在运行期间产生此结果? _latitude double 42.639913999999997

我很困惑。我认为只有在计算东西时才会出现浮点精度误差。为什么要在分配时创建不同的值?

1 个答案:

答案 0 :(得分:2)

将小数部分转换为二进制浮点数可能需要舍入的非平凡计算。

最接近的64位二进制IEEE 754编号为42.639914,为42.63991399999999742931322543881833553314208984375,因此在这种情况下需要进行舍入。

输出也是四舍五入的。如果只查看输入和舍入输出,则无法知道从十进制到二进制浮点的转换有多少舍入误差,以及输出转换的多少。上面的确切值是将输入到后续计算的值。

您可以使用可以精确转换为十进制的函数或者使用诸如Exploring Binary Decimal to Floating-Point converter之类的Web转换器来自行探索。