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

  • 相关阅读:
    移动端web
    递归求和
    json的基础了解
    冒泡排序的编程方法
    js面向对象
    1002,javascript的原型属性
    1001,instanceof关键字以及typeof关键字
    19,简述一下src与href的区别(不懂)
    531,<form>action属性
    530,css outline属性
  • 原文地址:https://www.cnblogs.com/FACESCORE/p/11278030.html
Copyright © 2011-2022 走看看