JavaScript 数字计算精度问题

Number最大值:2的53次方 16位: 9007199254740992

测试案例:123456789 * 987654321
正确结果:121932631112635269
实际结果:121932631112635260
原因:计算结果超出Number最大值导致精准度出现偏差

/* 解决方法1:将数字包裹在引号内进行计算:*/
console.log('123456789' * '987654321') //121932631112635260
/* 仍有偏差 */

/* 解决方法2:使用BigInt方法进行计算 */
console.log(BigInt(123456789 * 987654321)) ==> 121932631112635264n
/* 偏差较小,但仍不准确 */

/* 解决方法3:在已知数字后加n进行计算 */
console.log(BigInt(123456789n * 987654321n)) ==> 121932631112635269n
/* 结果精准,但只可在一直数值计算时可用 */

解决方法4:使用js库
计算大数值:https://www.npmjs.com/package/jsbn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值