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

  • 相关阅读:
    数据结构 AVL树
    数据结构 快速排序
    Mybatis 传递多个参数
    数据结构 二叉搜索树
    Java 多线程 ReadWriteLock
    Java 基础 集合框架
    SourceTree安装跳过注册
    【前端部署】阿里云 windows2019服务器用node部署静态项目
    【node开发】node简易服务器一分钟搞定
    【node开发】node.js编写一个接口
  • 原文地址:https://www.cnblogs.com/FACESCORE/p/11278030.html
Copyright © 2011-2022 走看看