JS浮点数做乘法运算精度丢失问题的解决方案

如图所示,由于这是因为在javascript中浮点数的计算是以2进制计算的,故而会出现精度丢失的问题

在这里插入图片描述

解决方法,将浮点数变为整数运算后再将小数点前移则可解决此问题

    // js浮点数加减乘除运算,精度丢失问题解决
    operation(list, pattern = '+') {
      // 只有一个数无需计算
      if(list.length === 1) return list[0]
      // 数据全部为0
      if(list.every(item => item === 0)) return 0
      // 转字符串
      let stringList = list.map(item => item.toString())
      // 判断是否全为整数
      if(stringList.every(item => item.indexOf('.')==-1)) { // 整数直接求结果
        let num = eval(list.join(pattern))
        return num
      } else {
        // 先获取精度(即结果需要前移几位)
        let m = eval(stringList.map(item => {
          return (item.indexOf('.') >= 0 ) ? item.split('.')[1].length : 0
        }).join('+'))
        // 而后去除小数点后运算结果
        let num = eval(stringList.map(item => {
          return Number(item.replace('.',''))
        }).join(pattern))
        // 最后小数点前移得到最终结果
        return num / Math.pow(10, m);
      } 
    }```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值