zoukankan      html  css  js  c++  java
  • JavaScript中Number数字数值浮点运算有误差

    JavaScript浮点运算的一个bug。
      比如:7*0.8 JavaScript算出来就是:5.6000000000000005

    //调用:numberExcept(arg1,arg2)

    //返回值:arg1除以arg2的精确结果

     numberExcept(arg1, arg2) {
          var t1, t2, r1, r2, m;
          try {
            t1 = arg1.toString().split(".")[1].length;
          } catch (e) {
            t1 = 0;
          }
          try {
            t2 = arg2.toString().split(".")[1].length;
          } catch (e) {
            t2 = 0;
          }
          m = Math.pow(10, Math.max(t1, t2));
          r1 = parseInt(arg1 * m + 0.5);
          r2 = parseInt(arg2 * m + 0.5);

          return r1 / r2;
        }

     

    //调用:

    numberRide(arg1,arg2)

    //返回值:arg1乘以arg2的精确结果
    function   numberRide(arg1,arg2)

    {
      var 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)
    }

    //调用:accAdd(arg1,arg2)
    //返回值:arg1加上arg2的精确结果
    function accAdd(arg1,arg2){
      var r1,r2,m;
      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))
      return (arg1*m+arg2*m)/m
    }


    减法函数

    function accSub(arg1, arg2) {
    var 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 ((arg1 * m - arg2 * m) / m).toFixed(n);
    }

  • 相关阅读:
    python 类
    hdu 5761 Rowe Bo 微分方程
    calendar 示例
    hdu 5753 Permutation Bo
    hdu 5752 Sqrt Bo
    finally 语句
    throws 和 throw
    python打开.pkl的文件并显示里面的内容
    Python 类变量,成员变量,静态变量,局部变量
    python 实例方法,类方法,静态方法,普通函数
  • 原文地址:https://www.cnblogs.com/FACESCORE/p/11278030.html
Copyright © 2011-2022 走看看