关于.toFixed()的重写

最近发现JS当中toFixed()方法存在一些问题。
采用toFixed()方法时,规则并不是标准的“四舍五入”。
而且不同的浏览器会有不同的结果,所以为了满足正确的运算,需要对toFixed重写。
在浏览了各大论坛后,有这么一种比较简单的方法:

<script>
Number.prototype.toFixed = function (exponent) { 
    return parseInt(this * Math.pow(10, exponent) + 0.5) / Math.pow(10, exponent); 
}
</script>

原理就不解释了,来不及了。
这个方法在正数情况下是可行的,但是对于负数还是会有偏差。
例如:document.write((-0.050).toFixed(2));
在Chrome下会输出为-0.04;
我觉得问题出现在+0.5那里,但是不知道咋改。
请大神指点一二。
另外,如果有更好的办法,还请不吝赐教,谢谢。

想了下……貌似这样可以的:

Number.prototype.toFixed = function (exponent) { 
    if(this>0){
        return parseInt(this * Math.pow(10, exponent) + 0.5) / Math.pow(10, exponent); 
    }else{
        return parseInt(this * Math.pow(10, exponent) - 0.5) / Math.pow(10, exponent); 
    }   
}

那么……还有更好的办法嘛?

阅读 4.9k
2 个回答

刚试了一下,我之前用的toFixed也有这个问题。。。

不过如果只对负数有问题的话,在开头检查一下是否是负数,如果是负数的话,就转换成正数处理,最后在结果前面加个-不就好了?

这个方法有个问题,你输入整数,30,300等发现输出还是30,300,但是页面展示肯定是30.00,300.00
当然只是展示的问题,但足以over.看了个别人的

(没有验证)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题