0%

小数安全问题

二进制浮点数中0.1和0.2并不精确,它们相加的结果并非刚好等于0.3,所以结果为false,可以设置一个误差范围值,通常称为机器精度,对于javaScript来说,通常是2^-52

从ES6开始,该值定义为Number.EPSILON

1
2
3
4
5
6
function numberCloseEnoughToEqual(n1,n2){
return Math.abs(n1-n2)<Number.EPSILON
}
var a=0.1+0.2;
var b=0.3;
console.log(numberCloseEnoughToEqual(a,b));