JS中浮点数总结

       浮点数的运算在业务中是比较常见的,js浮点数运算会出现多位小数,如0.1+0.2 = 0.30000000000000004, 这是由于在运算的时候先把浮点数转化成二进制后进行运算,但是有的小数在二进制编码后出现无限循环,因而导致计算出现了误差,在其它编程语言中也有类似的问题。

处理方法如下:

1.保留2为位小数:

handleDecimals = function (num) {
    let re = /([0-9]+\.[0-9]{2})[0-9]*/;
    let newNum = num.toString().replace(re,"$1");
    return Number(newNum);
}

2.利用JavaScript 的toFixed(n) 方法,直接获取N 位小数,该方法是四舍五入的, 这种方法存在精确度问题,但基本上是可以使用;
   如 var num = 0.888888888....; num.toFixed(2) = 0.89;但有时候会有问题 如 1.005 toFixed(2)=1.00  0.005 toFixed(2)=0.01

3.如果知道确定需要运算数的最大有几位小数点 也可以直接先乘以10的位数再除, 如 (0.1*10+0.2*10)/10 = 0.3;

4.不确定小数点位数时: 可以先把数字转化为字符串类型再判断小数点后的位数 再用方法3进行操作,这里要注意加减乘除有点不一样。如:

value = num.toString(); 
if (value.indexOf('.') > 0) {
    length = value.split('.')[1].length;
}

   4.直接用第三方处理浮点数的库,帮你封装好,引入直接可以用。 如:number-precision

具体用哪种方法 根据自己业务场景来选择

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值