2018-04-26 Javascript 0.1 + 0.2 !== 0.3

为什么0.1 + 0.2 !== 0.3

Javascript的浮点数类型不够精确,双精度浮点数类型的二进制位数加上符号位为53位,也就是说0.1的二进制树加上0.2的二进制数,转化为十进制数为0.30000000000000004,所以0.1 + 0.2 !== 0.3

怎么解决0.1 + 0.2 !== 0.3的问题

最好的方法是设置一个误差”机器精度”的范围值,与0.1 + 0.2 - 0.3的值进行比较,假如不超过这个范围就返回true,如果超过这个范围就返回false,可以利用ES6给开发者提供的一个新属性EPSILON,这个属性正好等于2^-52,无限接近于0,但不等于0

0.1 + 0.2 - 0.3 < Number.EPSILON

也可以利用保留小数的方式进行解决,比如toFixed和toPrecision

parseFloat((0.1 + 0.2).toFixed(1)) === 0.3