var a = 0.3-0.2; var b = 0.4-0.3; alert(a + "&" + b); if (a == b) { alert("true"); } else { alert("false"); }
0.09999999999999998&0.10000000000000003
结果为false
avaScript 只有一种数字类型 Number ,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的。 浮点数的精度问题不是JavaScript特有的,因为有些小数以二进制表示位数是无穷的:java和JavaScript中计算小数运算时,都会先将十进制的小数换算到对应的二进制,一部分小数并不能完整的换算为二进制,这里就出现了第一次的误差。待小数都换算为二进制后,再进行二进制间的运算,得到二进制结果。然后再将二进制结果换算为十进制,这里通常会出现第二次的误差。要避免这种情况呢,通常可以将小数同时扩大相同10的整倍数,完成计算后,在去掉之前添加的整倍数。
十进制 二进制0.1 0.0001 1001 1001 1001 ...0.2 0.0011 0011 0011 0011 ...0.3 0.0100 1100 1100 1100 ...0.4 0.0110 0110 0110 0110 ...0.5 0.10.6 0.1001 1001 1001 1001 ...