前端js实现正确的四舍五入,保留两位小数

166 阅读1分钟

公司有个项目是计算打分,有加减乘除,去掉最高分,最低分求平均值,保留两位小数,第三位四舍五入.用了很多方法,测试中发现一些有bug

使用过的方法

(Math.round(num * 100) / 100).toFixed(2);


(Math.round((num + Number.EPSILON) * 100) / 100).toFixed(2);

最终实现


    Number.prototype.$toFixed = function (d) {
        let times = Math.pow(10, d + 1);
        let des = parseInt(this * times + 5) / times + "";
        des += des.includes(".") ? "" : ".";
        while (d - des.split(".")[1].length > 0) {
          des += "0";
        }
        let [a, b] = des.split(".");
        return a + "." + b.substring(0, d);
      };

使用

      console.log((4.005).$toFixed(2));
      console.log((4.205).$toFixed(2));
      console.log((4.215).$toFixed(2));
      console.log((4.225).$toFixed(2));
      console.log((4.235).$toFixed(2));
      console.log((4.245).$toFixed(2));
      console.log((4.255).$toFixed(2));
      console.log((4.265).$toFixed(2));
      console.log((4.275).$toFixed(2));
      console.log((4.285).$toFixed(2));
      console.log((4.295).$toFixed(2));
      console.log((4.485).$toFixed(2));

image.png