最近发现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); } }
那么……还有更好的办法嘛?
繁星淼淼
相关分类