不只是JavaScript,所有遵循IEEE754规范的语言都会出现这么一个问题
0.1+0.2=0.30000000000000004
简单来说,出现这种问题的原因是二进制浮点数中的0.1和0.2并不十分精确
所以最常见的方法是设定一个误差值来判断0.1+0.2是否和0.3相等
而这个误差值通常是2^-52(2.220446049250313e-16)
从ES6开始,该值定义在Number.EPSILON中,我们可以直接拿来用
num = 0.1 + 0.2;
console.log((Math.abs(num - 0.3) < Number.EPSILON) ? 0.3 : num); //0.3
也可以为ES6之前的版本写一个polyfill
if(!Number.EPSILON) {
Number.EPSILON = Math.pow(2, -52);
}