论坛首页 Web前端技术论坛

你还在用toFixed来进行四舍五入么?

浏览 40942 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-11-24  
QMax 写道
我们在使用的过程中发现还是会有一些问题,
比如55.555保留两位小数,可以变成55.56,
但是555.555,保留两位就变成555.55了



在IE7测试,使用toFixed确实如此。
0 请登录后投票
   发表时间:2009-12-11  
调用过这段方法肯定没有问题,修复Number的toFixed方法,试试吧,原来的代码都不用改动。


Number.prototype.toFixed = function(d) {
var s = this + "";
if (!d)
d = 0;
if (s.indexOf(".") == -1)
s += ".";
s += new Array(d + 1).join("0");
if (new RegExp("^(-|\\+)?(\\d+(\\.\\d{0," + (d + 1) + "})?)\\d*$").test(s)) {
var s = "0" + RegExp.$2, pm = RegExp.$1, a = RegExp.$3.length, b = true;
if (a == d + 2) {
a = s.match(/\d/g);
if (parseInt(a[a.length - 1]) > 4) {
for (var i = a.length - 2; i >= 0; i--) {
a[i] = parseInt(a[i]) + 1;
if (a[i] == 10) {
a[i] = 0;
b = i != 1;
} else
break;
}
}
s = a.join("").replace(new RegExp("(\\d+)(\\d{" + d + "})\\d$"),
"$1.$2");
}
if (b)
s = s.substr(1);
return (pm + s).replace(/\.$/, "");
}
return this + "";
};

0 请登录后投票
   发表时间:2009-12-25  
parseFloat(parseFloat(-0.0015).toFixed(2)可以正确的得到0
为什么不采用这种方式呢?
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics