JavaScript 中有个 `toFixed()` 方法,可以把 Number 类型“四舍五入”为指定小数位数的数字字符串。 但在实际使用中,这个方法的行为有时会让人匪夷所思,例如下面的表达式: ```js 0.045.toFixed(2); ``` 执行后,Chrome、Firefox 浏览器输出的并非预期的 `0.05`,而是 `0.04`,IE 则输出了预期的 `0.05`。由此可见这个方法的四舍五入是不稳定的,存在浏览器差异,这无疑会给我们的实际开发带来麻烦。如何解决?一般通用的方式就是重写这个方法,使其行为符合四舍五入规则。 ```js var oldtoFixed = Number.prototype.toFixed; Number.prototype.toFixed = function(digits) { var length = (parseFloat(this) + '').replace(/^\d+\.?/, '').length; var len = length > digits ? length : digits; var number = Number(this) + Math.pow(10, -len-1); return oldtoFixed.call(number, digits); } ```
Activity