关于.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); 
    }   
}

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


BIG阳
浏览 777回答 1
1回答

繁星淼淼

这个方法有个问题,你输入整数,30,300等发现输出还是30,300,但是页面展示肯定是30.00,300.00当然只是展示的问题,但足以over.看了个别人的(没有验证)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript