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);
    }

  • 相关阅读:
    显示器面板参数
    解决SQL Server 2008安装时提示:重新启动计算机 失败
    SQL Server 的 TSQL 语句的性能评估方法
    判断字母大小写
    linux发展史简介
    下载route命令源码
    TCP糊涂窗口综合症
    QT显示中文
    TCP四个定时器 之 TCP坚持定时器
    android 去ListView滑动阴影
  • 原文地址:https://www.cnblogs.com/FACESCORE/p/11278030.html
Copyright © 2011-2022 走看看