• 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);
        }
    
  • 相关阅读:
    Spring.Net框架与WCF的集成(上)
    重入与回调并发(Reentrant & CallbackConcurrency )
    WCF中的异步实现
    WCF开发时如何选择正确的实例模式(InstanceMode)?
    WCF实例与并发
    WCF消息可靠性与有序传递
    WCF实际应用之IParameterInspector扩展
    WCF中几个基本知识点整理
    HTTP与Tcp协议下双工通信的差异
    细说WCF中的会话模式
  • 原文地址:https://www.cnblogs.com/tcz1018/p/13273144.html
Copyright © 2020-2023  润新知