javascript中浮点运算精度问题

    计算机是由二进制存储和处理数字的,不能精确到处理浮点数,且javascript也没有这样的方法 所以在浏览器计算的时候也会有误差,比如说 我想用 3.3 / 1.1  那么按道理来说 答案是 3 ,对不对 但是我们可以打印出来看下 结果令我们很惊讶 是 2.9999999999999996 .

    现在我们想 为了避免产生精度差异,需要计算的数字升级(乘以10的n次幂)成计算机能够精确识别的整数,等计算完毕再降级(除以10的n次幂). 这样处理下 就可以实现正常的结果


代码如下:

复制代码
/*
  * JS减法 解决精度问题
  */

  function subtraction(arg1,arg2){
     var firstArg,
         lastArg,
         differ,
         m;
     try{
        firstArg = arg1.toString().split('.')[1].length;
     }catch (e){
        firstArg = 0;
     }

     try{
        lastArg = arg2.toString().split('.')[1].length;
     }
     catch (e){
        lastArg = 0;
     }
     differ = Math.pow(10, Math.max(firstArg, lastArg));
     m = (firstArg > lastArg) ? firstArg : lastArg;
     return ((arg1 * differ - arg2 * differ) /    differ).toFixed(m);
  }
复制代码
注意:浮点小数加减乘除都会有精度误差,所以只能转为字符串,获取应该变为多少倍后在用整数进行运算

猜你喜欢

转载自blog.csdn.net/qq_39643110/article/details/80495267