为什么会这样?11.99*11 = 131.89000000000001

Why is this? in javascript 11.99*11 = 131.89000000000001

本文关键字:89000000000001 为什么      更新时间:2023-09-26

<script>
    alert(10.99*11);// = 120.89
    alert(11.99*11);// = 131.89000000000001
    alert(12.99*11);// = 142.89000000000001
    alert(13.99*11);// = 153.89000000000001
    alert(14.99*11);// = 164.89000000000001
    alert(15.99*11);// = 175.89000000000001
    alert(16.99*11);// = 186.89
</script>

为什么会这样?

为什么返回000000000001?

11.99在二进制浮点数中没有精确的表示,所以编译器使用了最接近它的值。因此,当你乘以11时,你得到的答案非常非常接近你想要的值,但不是完全正确。

其他值也会发生这种情况。例如…

data = 0.3

data包含什么值?提示:它不是0.3,因为0.3不能精确地用浮点表示,它可能是0.2999999999999988897769753748434595763683319091796875,这是在一个特定的浮点二进制格式中可以表示的最接近的值。非常非常接近,但不完全相同。同样的问题也适用于你的数字