美文网首页
数据计算精度丢失处理

数据计算精度丢失处理

作者: 七號7777 | 来源:发表于2019-10-28 17:28 被阅读0次

参考文档:https://www.cnblogs.com/mandalaluo/p/5523750.html

      /**
      * 加法运算,避免数据相加小数点后产生多位数和计算精度损失。
      *
      * @param num1加数1 | num2加数2
      */
      function numAdd(num1, num2) {
        var baseNum, baseNum1, baseNum2;
        try {
          baseNum1 = num1.toString().split(".")[1].length;
        } catch (e) {
          baseNum1 = 0;
        }
        try {
          baseNum2 = num2.toString().split(".")[1].length;
        } catch (e) {
          baseNum2 = 0;
        }
        baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
        return (num1 * baseNum + num2 * baseNum) / baseNum;
      };
      /**
       * 加法运算,避免数据相减小数点后产生多位数和计算精度损失。
       *
       * @param num1被减数  |  num2减数
       */
      function numSub(num1, num2) {
        var baseNum, baseNum1, baseNum2;
        var precision;// 精度
        try {
          baseNum1 = num1.toString().split(".")[1].length;
        } catch (e) {
          baseNum1 = 0;
        }
        try {
          baseNum2 = num2.toString().split(".")[1].length;
        } catch (e) {
          baseNum2 = 0;
        }
        baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
        precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;
        return ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);
      };
      /**
       * 乘法运算,避免数据相乘小数点后产生多位数和计算精度损失。
       *
       * @param num1被乘数 | num2乘数
       */
      function numMulti(num1, num2) {
        var baseNum = 0;
        try {
          baseNum += num1.toString().split(".")[1].length;
        } catch (e) {
        }
        try {
          baseNum += num2.toString().split(".")[1].length;
        } catch (e) {
        }
        return Number(num1.toString().replace(".", "")) * Number(num2.toString().replace(".", "")) / Math.pow(10, baseNum);
      };
      /**
       * 除法运算,避免数据相除小数点后产生多位数和计算精度损失。
       *
       * @param num1被除数 | num2除数
       */
      function numDiv(num1, num2) {
        var baseNum1 = 0, baseNum2 = 0;
        var baseNum3, baseNum4;
        try {
          baseNum1 = num1.toString().split(".")[1].length;
        } catch (e) {
          baseNum1 = 0;
        }
        try {
          baseNum2 = num2.toString().split(".")[1].length;
        } catch (e) {
          baseNum2 = 0;
        }
        with (Math) {
          baseNum3 = Number(num1.toString().replace(".", ""));
          baseNum4 = Number(num2.toString().replace(".", ""));
          return (baseNum3 / baseNum4) * pow(10, baseNum2 - baseNum1);
        }
      };

相关文章

网友评论

      本文标题:数据计算精度丢失处理

      本文链接:https://www.haomeiwen.com/subject/enyumctx.html