js toFixed()方法的重写实现精度的统一_javascript技巧
程序员文章站
2022-04-29 18:22:06
...
但凡用过js 中的toFix() 方法的, 应该都知道这个方法存在一个小小的BUG。
在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(index0){
changenum=changenum+".";
for(i=0;ichangenum=changenum+"0";
}
}else {
index=changenum.length-index;
for(i=0;ichangenum=changenum+"0";
}
}
return changenum;
}
在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(index0){
changenum=changenum+".";
for(i=0;i
}
}else {
index=changenum.length-index;
for(i=0;ichangenum=changenum+"0";
}
}
return changenum;
}
推荐阅读
-
js获取隐藏元素宽高的实现方法_javascript技巧
-
js实现防止被iframe的方法_javascript技巧
-
js中判断对象是否为空的三种实现方法_javascript技巧
-
js中判断对象是否为空的三种实现方法_javascript技巧
-
用js实现计算代码行数的简单方法附代码_javascript技巧
-
JS实现两表格里数据来回转移的方法_javascript技巧
-
js实现连个数字相加而不是拼接的方法_javascript技巧
-
js实现感应鼠标图片透明度变化的方法_javascript技巧
-
JS实现点击按钮自动增加一个单元格的方法_javascript技巧
-
js实现类似新浪微博首页内容渐显效果的方法_javascript技巧