toFixed方法的坑

157 阅读1分钟
  • toFixed方法存在一定的问题

toFixed使用的是银行家算法(四舍六入五成双):也即“4舍6入5凑偶”这里“四”是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是偶数)。(这种方法在chrome浏览器里面不对,在ie里面是对的。)

下面这些数据并没有真正的实现四舍五入

(0.075).toFixed(2)   // 0.07
(0.045).toFixed(2)   // 0.04
(0.015).toFixed(2)   // 0.01

我看到有一个人写的tofixed原理,下面这样写并没有上面的问题(针对负数进行计算的时候存在问题)。

function myToFixed(num,n){
  //要取多少位小数,就先乘以10的多少次方
  num *= Math.pow(10,n)
 //在四舍五入取整
  num = Math.round(num)
//再除以10的多少次方就是保留多少位小数了
  num /= Math.pow(10,n)
  return num
}

有个博主重写了toFixed方法,可以看一下。 blog.csdn.net/weixin_4254…