JavaScript的计算精度问题

2021-04-22 21:35

阅读:431

标签:ber   last   javascrip   spl   let   str   代码   rip   Fix   

直接使用代码吧

   // 数字相加
    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的计算精度问题

标签:ber   last   javascrip   spl   let   str   代码   rip   Fix   

原文地址:https://www.cnblogs.com/tcz1018/p/13273144.html


评论


亲,登录后才可以留言!