默认的javascript中的“Number.toFixed”实现似乎有些问题。
console.log((8.555).toFixed(2)); // returns 8.56
console.log((8.565).toFixed(2)); // returns 8.57
console.log((8.575).toFixed(2)); // returns 8.57
console.log((8.585).toFixed(2)); // returns 8.59
我需要一种比现在更加稳定的四舍五入方法。
在8.500和8.660之间,以下数字无法正确地进行四舍五入。
8.575
8.635
8.645
8.655
我已经尝试修复原型实现,但只完成了一半。有人能建议一些改变使其更加一致吗?
Number.prototype.toFixed = function(decimalPlaces) {
var factor = Math.pow(10, decimalPlaces || 0);
var v = (Math.round(this * factor) / factor).toString();
if (v.indexOf('.') >= 0) {
return v + factor.toString().substr(v.length - v.indexOf('.'));
}
return v + '.' + factor.toString().substr(1);
};