为什么toFixed(2)四舍五入保留两位小数,第三位大于等于5时,有时候会进位,有时不会进位?
问题描述
在做项目得时候遇到金额得计算,计算出金额之后需要保留两位小数,并且小数的第三位大于等于五需要向小数点的第二位加1(进位),也就是四舍五入。但是遇到了一个奇葩的问题,也就是toFixed(2)有时候 会向前进一,有时候不会,如下:
** 这个大于等于五不会进位 **
** 这个大于等于五会进位 **
得出的结果让我很困惑,于是经过我不断查阅百度和各种论坛终于找到了解决方法:
//在需要的地方使用这个方法
this.getRoundeNumber(num)
//这个方法可以放在全局或者工具类型里面
getRoundeNumber(num) {
if (!Number.prototype._toFixed) {
// eslint-disable-next-line no-extend-native
Number.prototype._toFixed = Number.prototype.toFixed
}
// eslint-disable-next-line no-extend-native
Number.prototype.toFixed = function(n) {
return (this + 1e-14)._toFixed(n)
}
return Number(num).toFixed(2)
},
结果:
至于为什么有时候会进位,有时候不会的原理,请移步原理