关于浏览器Number.toFixed的错误修复

问题描述如下:

   var n = 1.255;
     var fixed = n.toFixed(2);
     console.log(fixed);//结果:1.25
 
 /*
 以上代码运行预期的结果是1.26,但是得到的结果却是1.25,为什么会出现这个情况?我们要的浮点数为何出现错误;
 然而我们可以再测试:

console.log(1.255*100);这行代码并不等于125.5,而是等于  125.49999999999999

也就可以完全肯定,这既是一个计算机精度错误导致的

那么我们又该如何去消除这个Number类型下的四舍五入精度误差呢?以下为我个人使用方法
*/


    Number.prototype.toFixed = function(n) {
      n = Math.round(n); //防传入小数

      const pow = Math.pow(10, n);
      const num = Math.fround(this * pow);
      const result = (Math.round(num) / pow).toString();

      let [int, float] = result.split(".");

      float = float || "";

      let floatLen = float ? float.length : 0;
      let fillLen = n - floatLen;

      if (fillLen <= n) {
        for (let i = 0; i < fillLen; i++) {
          float += "0";
        }
      }

      return n === 0 ? int : int + "." + float;
    };

 

posted on 2020-03-23 22:41  骑士007  阅读(449)  评论(0编辑  收藏  举报

导航