我发现许多人在JavaScript的toFixed()方法上遇到了麻烦。我自己的网站在IE7和FireFox 4.x中也出现了问题。
最终,我发现问题出在toFixed()方法上。在某些浏览器中,它似乎返回一个字符串,在其他浏览器中则不然 - 它的行为似乎是不可预测的。
因此,我决定扩展原型对象并创建自己的方法,而不是每次都需要做相同的parseFloat/integer操作。
使用这个方法,您可以将数字四舍五入到任意小数位数,并指定要使用的舍入类型:floor、ceil或null以使用标准舍入(round)。
代码如下:
最终,我发现问题出在toFixed()方法上。在某些浏览器中,它似乎返回一个字符串,在其他浏览器中则不然 - 它的行为似乎是不可预测的。
因此,我决定扩展原型对象并创建自己的方法,而不是每次都需要做相同的parseFloat/integer操作。
使用这个方法,您可以将数字四舍五入到任意小数位数,并指定要使用的舍入类型:floor、ceil或null以使用标准舍入(round)。
代码如下:
// a replacement for the toFixed() function in javascript
Number.prototype.trimNum = function(places,rounding){
var places,result,num = parseFloat(this),multiplier = Math.pow( 10,places );
try {
result = Math[rounding](num * multiplier) / multiplier;
} catch(e){
result = Math.round(num * multiplier) / multiplier;
}
return Number( result );
}
用法:
mynumbervar.trimNum(2,'floor')
使用 floor 进行四舍五入
mynumbervar.trimNum(2,'ceil')
使用 ceil 进行四舍五入
mynumbervar.trimNum(2)
使用 round 进行四舍五入
当然,这里的数字“2”是要保留的小数位数。
我已在PC和Mac上的IE、Safari、Chrome和FireFox中进行了测试,对我来说似乎工作得很好。
我希望这能帮助其他人避免我曾经遇到的toFixed()问题...
有人知道这方面的任何问题或建议吗?