关于0.1+0.2和0.3是否相等的判断及误差范围值的设置
现象:js中判断 0.1+0.2 === 0.3 的结果为false
如何判断 0.1+0.2 和 0.3 相等呢
常见方法1:设置一个误差范围值,通常称为“机器精度”,对js的数字来说,这个值通常是2^-52(2.220446049250313e-16)。
ES6中,该值定义在Number.EPSILON中。可以直接使用。ES6之前版本可以写polyfill:
if (!Number.EPSILON) {
Number.EPSILON = Math.pow(2,-52);
}
使用为:
function numbersCloseEnoughToEqual(arg1, arg2) {
return Math.abs(Arg1, arg2) < Number.EPSILON;
}
常见方法2:将两边的参数值变成整数后进行比较
例:判断0.1+0.2和0.3是否相等,可将值扩大为1+2和3是否相等