首先解释一下原因:
归根结底是计算机浮点计算的问题:二进制
1.01 表示为:
0 0111111 1111 0000 00101000 11110101 11000010 10001111 01011100 00101001
2.01 表示为;
0 1000000 0000 0000 00010100 01111010 11100001 01000111 10101110 000101002.01+1.01 在编程语言中的计算结果 表示为:
0 1000000 0000 1000 00101000 11110101 11000010 10001111 01011100 00101000
好了,我们可以比较一下3.02和计算结果,果然有所不同,最后一个bit不同,所以
2.01+1.01变成了3.0199999999999995
因为浮点数在计算机内的存储存在偏差,导致运算时,与实际期望的结果不同
归根结底是计算机浮点计算的问题:二进制
1.01 表示为:
0 0111111 1111 0000 00101000 11110101 11000010 10001111 01011100 00101001
2.01 表示为;
0 1000000 0000 0000 00010100 01111010 11100001 01000111 10101110 000101002.01+1.01 在编程语言中的计算结果 表示为:
0 1000000 0000 1000 00101000 11110101 11000010 10001111 01011100 00101000
好了,我们可以比较一下3.02和计算结果,果然有所不同,最后一个bit不同,所以
2.01+1.01变成了3.0199999999999995
因为浮点数在计算机内的存储存在偏差,导致运算时,与实际期望的结果不同
<script>
a = -2.3;
b = 20;
c = -20;
alert(parseInt(a)+parseInt(b)+parseInt(c)+parsePointer(a)+parsePointer(b)+parsePointer(c));
function parsePointer(n)
{
return parseFloat(n)-parseInt(n);
}
</script>
这种问题其实没必要深究.