js toFixed()方法的重写实现精度的统一
2018-10-12 14:05
621 查看
但凡用过js 中的toFix() 方法的, 应该都知道这个方法存在一个小小的BUG。
在IE 下和FF 下对于小数的进位有点不同。
例如( 0.005)在ie 下 toFix(2)=0.00. 在FF 下 toFix(2)=0.01.
这样就会造成数据的差异。
我们可以通过 重写 这个方法来实现精度的统一。
但是这样做仍然有一个问题, 在所有的浏览器下, String("0.050").toFix(2)=0.1
我们可以看到这样你原本要保留两位小数却变成了一位。 也就是说。这个重写只有的toFixed() 会自动舍弃最后的0.
我们需要对这个方法做进一步的处理。
在IE 下和FF 下对于小数的进位有点不同。
例如( 0.005)在ie 下 toFix(2)=0.00. 在FF 下 toFix(2)=0.01.
这样就会造成数据的差异。
我们可以通过 重写 这个方法来实现精度的统一。
Number.prototype.toFixed = function(s)
{
return (parseInt(this * Math.pow( 10, s ) + 0.5)/ Math.pow( 10, s )).toString();
}
但是这样做仍然有一个问题, 在所有的浏览器下, String("0.050").toFix(2)=0.1
我们可以看到这样你原本要保留两位小数却变成了一位。 也就是说。这个重写只有的toFixed() 会自动舍弃最后的0.
我们需要对这个方法做进一步的处理。
Number.prototype.toFixed = function(s)
{
changenum=(parseInt(this * Math.pow( 10, s ) + 0.5)/ Math.pow( 10, s )).toString();
index=changenum.indexOf(".");
if(index<0&&s>0){
changenum=changenum+".";
for(i=0;i<s;i++){
changenum=changenum+"0";
}
}else {
index=changenum.length-index;
for(i=0;i<(s-index)+1;i++){
changenum=changenum+"0";
}
}
return changenum;
}
您可能感兴趣的文章:
- JS处理数据四舍五入(tofixed与round的区别详解)
- JS使用tofixed与round处理数据四舍五入的区别
- Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
- Javascript中 toFixed四舍六入方法
- JavaScript中Number对象的toFixed() 方法详解
- js保留两位小数使用toFixed实现
- javascript中的toFixed固定小数位数 简单实例分享
- JS中toFixed()方法引起的问题如何解决
- JavaScript toFixed() 方法
- javascript之对系统的toFixed()方法的修正
- javascript中toFixed()四舍五入使用方法详解
相关文章推荐
- js toFixed()方法的重写实现精度的统一
- JS重写函数valueOf方法实现连续调用求和
- ConvertJSONDateToJSDateObject 方法实现json格式时间串转换为 对应的时间格式串
- js怎么覆盖原有方法实现重写
- Js toFixed()四舍五入BUG的解决方法
- js toFixed().方法的延伸
- js怎么覆盖原有方法实现重写
- js中setTimeout方法重写,实现对象参数传递
- js重写方法的简单实现
- js toArray的更好实现方法
- CSDN上快速结贴的方法,JS实现
- CSDN上快速结贴的方法,JS实现
- 不用AJAX实现前台JS调用后台C#方法(小技巧)
- 动态生成js类的实现方法
- Dom4j递归解析XML实现JS的getElementsByName类似方法
- 不用AJAX实现前台JS调用后台C#方法(小技巧)
- 仿服务器端脚本方式的JS模板实现方法
- asp.net下用url重写URLReWriter实现任意二级域名的方法第1/2页
- 使用RewritePath方法实现【不同路径+任意URL后缀重写到指定页面且URL地址不变】(附源码)_AX
- asp.net下用url重写URLReWriter实现任意二级域名的方法第1/2页