一、toFixed方法说明
toFixed() 方法使用定点表示法来格式化一个数。
numObj.toFixed(digits)一个数值的字符串表现形式,不使用指数记数法,而是在小数点后有 digits 位数字。该数值在必要时进行四舍五入,另外在必要时会用 0 来填充小数部分,以便小数部分有指定的位数。 如果数值大于 1e+21,该方法会简单调用 Number.prototype.toString()并返回一个指数记数法格式的字符串。
示例
1. 看下面示例,四舍五入是没问题的对吧

2. 如果把整数部分换成1,试试看

看到没,1.45 保留一位小数成了1.4,被舍去了
正如标题所说的 四舍六入,五看奇偶
解决方法
Firefox 和 Chrome的实现没有问题,根本原因是计算机里浮点数精度丢失问题。修复方式改为
// toFixed 修复function toFixed(num, s) { var times = Math.pow(10, s) var des = num * times + 0.5 des = parseInt(des, 10) / times return des + ''} |
|---|
或者直接向 Number 的原型重新定义该方法
// toFixed 修复Number.prototype.toFixed = function(s) { var times = Math.pow(10, s) var des = this * times + 0.5 des = parseInt(des, 10) / times return des + ''} |
|---|
修改后的示例:
