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

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

JS浮点数做乘法运算精度丢失问题的解决方案_第1张图片

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

    // 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);
      } 
    }```

你可能感兴趣的:(随手笔记,jsvascript,js,javascript,前端)