js 精度丢失问题
0.3+0.3+0.3 = 0.899999999999
MathUtils = {
roundToPrecision: function(subject, precision) {
return +((+subject).toFixed(precision));
}
};
console.log(MathUtils.roundToPrecision(0.3 + 0.6, 1)) // 0.9;
0.1+0.2!=0.3
js中0.1+0.2不等于0.3的原因:浮点数转二进制后丢失了一些精度,再转十进制后就不为原来的值了。
1.ES6提供的Number.EPSILON方法, Number.EPSILON实际上是 JavaScript 能够表示的最小精度,等于 2 的-52 次方,误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。
function numbersequal(a,b){ return Math.abs(a-b)<Number.EPSILON;
}
var a=0.1+0.2, b=0.3;
console.log(numbersequal(a,b)); //true
2.把计算数字 提升 10 的N次方 倍 再 除以 10的N次方。N>1.
let a = (0.1 * 100 + 0.2 * 100) / 100
let b = 0.3
console.log(a === b);//true