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