• 解决JS精度丢失问题


    JS经典问题:0.1+0.2!=0.3

     

    为什么会造成精度丢失?

    核心:因为JS遵守IEEE 754采用双精度存储,又因为JS最大位数是52位,最大数是2^53,而数字转成二进制时大于52位,后面的位数就会被舍弃,导致累加后就造成精度丢失。

    解决方式

    1.对结果进行解决

    //number:结果(如:0.3111111)
    //len:需要保留几位小数
    function toFixed(number,len){
      //需要n位小数就乘以n倍
      const ceil = Math.pow(10,len);
      //加0.5是为了四舍五入
      const intNum = number*ceil+0.5;
      //再除以n倍
      const result = parseInt(intNum,10)/ceil;
      return result
    }

    2.对过程进行解决

      //frontNum 第一个数
      //endNum 第二个数
      //action 操作符
      function changeNumber(frontNum, endNum, action) {
        //数字转成字符串判断位数大小
        const maxLen = Math.max((frontNum + "").length, (endNum + "").length);
        //-2是因为存在"0"和"."
        const maxCeil = Math.pow(10, maxLen - 2);
        let result;
        if (action == '+') {
          result = ((frontNum * maxCeil) + (endNum * maxCeil)) / maxCeil;
        }
        //....除  减...
        return result
      }
  • 相关阅读:
    python3 解决tcp黏包方法一
    python3 udp不黏包但丢数据
    python3 类的单例模式
    python3 day07 练习题
    python3 tcp黏包情况二
    python3 tcp黏包情况一
    python3 subprocess模块
    python3 UDP协议下的socket
    python3 TCP协议下的socket
    python3 socket网络通信的整个流程
  • 原文地址:https://www.cnblogs.com/feifei0928/p/15908229.html
Copyright © 2020-2023  润新知