toFixed,我经常用来四舍五入保留两位小数,但是到今天我才真正意识到toFixed不是真的四舍五入,他是四舍六入!
下面是我们日常的用法
0.1335.toFixed(2)
0.1336.toFixed(2)
1.336.toFixed(2)
1.335.toFixed(2)
莫度上基本回答是使用Math.round,乘以100,再除以100,就试了一下
Math.round(0.135 * 100) / 100
Math.round(1.35 * 100) / 100
Math.round(1.36 * 100) / 100
但是,这样处理真的完美吗?然后我又0.145来验证下
找了很多方法,大部分都是用Math.round(num * 100) / 100,
所以我就把toFixed这个方法重写
script>
Number.prototype._toFixed = Number.prototype.toFixed;
Number.prototype.toFixed = function (n = 2) {
let temp = (this + "").split(".");
if (!temp[1] || temp[1].length <= n) {
return this._toFixed(n);
} else {
let nlast = temp[1].substring(n, n + 1);
temp[1] = temp[1].substring(0, n) + (nlast >= 5 ? "9" : "1");
return Number([temp[0], temp[1]].join("."))._toFixed(n);
}
};
console.log((0.145).toFixed(2));
console.log((0.135).toFixed(2));