js数值在接近float接近显示极限时,保证运算精度的一种解决思路

博客指出JS的float类型存在精度问题,在进行大数值运算且需保留两位小数时,数值在99999999999999.98左右运算会出现0.01层次的波动,导致运算失准。还提到将大数值当字符串分割为整数和小数部分分别运算再相加的解决办法。

js的float类型精度问题是一个令人头疼的坑

我使用时,需要小数点后保留两位有效数字

这时进行大数值运算,尤其是数值在99999999999999.98左右运算时,运算会出现0.01数值层次范围波动,这样运算就会失准。

我用js将大数值当字符串分割为整数部分和小数部分

分别运算然后相加,demo:

var str1_head = str1.substr(0,str1.indexOf('.'));
var str1_tail = str1.substr(str1.indexOf('.')+1
    ,str1.length-str1.indexOf('.')-1);
console.log('str1 :'+str1_head+'.'+str1_tail);

var str2_head = str2.substr(0,str2.indexOf('.'));
var str2_tail = str2.substr(str2.indexOf('.')+1
    ,str2.length-str2.indexOf('.')-1);

console.log('str2 :'+str2_head+'.'+str2_tail);

res = (parseInt(str2_head)-parseInt(str2_head))+ (parseInt(str2_tail)-parseInt(str2_tail))/100;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值