js 精度丢失问题

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值