JS浮点数精度问题
var a = 0.1 + 0.2;
var b = 0.3;
console.log(a===b);//false
console.log(a);//0.30000000000000004
这是因为浮点数有时并不能准确的转换为二进制数。因此,内部进行二进制运算时会有精度误差
怎么解决呢?
function almostEqual(num1, num2) {
Number.EPSILON = Number.EPSILON || Math.pow(2,-52);
return num1 - num2 < Number.EPSILON;
}
console.log(almostEqual(0.1 + 0.2, 0.3));
使用Number中的特殊常数值——EPSILON。原理是,当两者的差值在一定范围内时,则判定为相等
Number.EPSILON通常为2^-52