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.1 0.6 0.1001 1001 1001 1001 ...