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

为什么会这样?在javascript 11.99*11=131.89000000000001中,javascript,Javascript,在javascript中 <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.9

在javascript中

<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>

警报(10.99*11);//=120.89
警报(11.99*11);//=131.89000000000001
警报(12.99*11);//=142.89000000000001
警报(13.99*11);//=153.89000000000001
警报(14.99*11);//=164.89000000000001
警报(15.99*11);//=175.89000000000001
警报(16.99*11);//=186.89
为什么会这样


为什么返回000000000001?

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

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

data = 0.3

数据包含什么值?提示:它不是0.3,因为0.3不能用浮点精确表示,它可能是0.29999999999888977697975374345957683319091796875,这是一种特定浮点二进制格式中最接近的值。非常接近,但不完全相同。同样的问题也适用于你的数字。< / P>我猜它是与浮点运算有关的。也许你应该考虑一下这个问题,java有类似的问题,因为基本上数据是二进制的。