fezaoduke / fe-practice-hard

晚练课
69 stars 6 forks source link

第 94 期(W3C 标准-JavaScript):toFixed 方法 #97

Open wingmeng opened 5 years ago

wingmeng commented 5 years ago

JavaScript 中有个 toFixed() 方法,可以把 Number 类型“四舍五入”为指定小数位数的数字字符串。

但在实际使用中,这个方法的行为有时会让人匪夷所思,例如下面的表达式:

0.045.toFixed(2);

执行后,Chrome、Firefox 浏览器输出的并非预期的 0.05,而是 0.04,IE 则输出了预期的 0.05。由此可见这个方法的四舍五入是不稳定的,存在浏览器差异,这无疑会给我们的实际开发带来麻烦。如何解决?一般通用的方式就是重写这个方法,使其行为符合四舍五入规则。

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);
}