JavaScript的计算精度问题

Posted 无梦南柯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript的计算精度问题相关的知识,希望对你有一定的参考价值。

直接使用代码吧

   // 数字相加
    xiangjia (arg1, arg2) {
      let r1, r2, m, c;
      try {
        r1 = arg1.toString().split(‘.‘)[1].length;
      } catch (e) {
        r1 = 0;
      }
      try {
        r2 = arg2.toString().split(‘.‘)[1].length;
      } catch (e) {
        r2 = 0;
      }
      c = Math.abs(r1 - r2);
      m = Math.pow(10, Math.max(r1, r2));
      if (c > 0) {
        let cm = Math.pow(10, c);
        if (r1 > r2) {
          arg1 = Number(arg1.toString().replace(‘.‘, ‘‘));
          arg2 = Number(arg2.toString().replace(‘.‘, ‘‘)) * cm;
        } else {
          arg1 = Number(arg1.toString().replace(‘.‘, ‘‘)) * cm;
          arg2 = Number(arg2.toString().replace(‘.‘, ‘‘));
        }
      } else {
        arg1 = Number(arg1.toString().replace(‘.‘, ‘‘));
        arg2 = Number(arg2.toString().replace(‘.‘, ‘‘));
      }
      return (arg1 + arg2) / m;
    }
    // 数字相减
    xiangjian (arg1, arg2) {
      let r1, r2, m, n;
      try {
        r1 = arg1.toString().split(‘.‘)[1].length;
      } catch (e) {
        r1 = 0;
      }
      try {
        r2 = arg2.toString().split(‘.‘)[1].length;
      } catch (e) {
        r2 = 0;
      }
      m = Math.pow(10, Math.max(r1, r2)); // last modify by deeka //动态控制精度长度
      n = (r1 >= r2) ? r1 : r2;
      return Number(((arg1 * m - arg2 * m) / m).toFixed(n));
    }
    // 数字相乘
    xiangcheng (arg1, arg2) {
      let m = 0, s1 = arg1.toString(), s2 = arg2.toString();
      try {
        m += s1.split(‘.‘)[1].length;
      } catch (e) {
      }
      try {
        m += s2.split(‘.‘)[1].length;
      } catch (e) {
      }
      return Number(s1.replace(‘.‘, ‘‘)) * Number(s2.replace(‘.‘, ‘‘)) / Math.pow(10, m);
    }
    // 数字相除
    xiangchu(num1 , num2) {
       let t1 , t2 , r1 , r2
       try {
         t1 = `${num1}`.split(‘.‘)[1].length;
       } catch (e) {
         t1 = 0;
       }
       try {
         t2 = `${num2}`.toString().split(‘.‘)[1].length;
       } catch (e) {
         t2 = 0;
       }
       r1 = Number(`${num1}`.replace(‘.‘ , ‘‘));
       r2 = Number(`${num2}`.toString().replace(‘.‘ , ‘‘));
       return(r1 / r2) * Math.pow(10 , t2 - t1);
    }

以上是关于JavaScript的计算精度问题的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中解决计算精度丢失的问题

JavaScript的计算精度问题

js乘法精度计算代码 求解释

js精度计算

解决JavaScript浮点数计算精度问题

10个JavaScript代码片段,使你更加容易前端开发。