JS中toFixed()方法的四捨五入問題解決方法
最近發現JS當中toFixed()方法存在一些問題,採用原生的Number物件的原型物件上的toFixed()方法時,規則並不是所謂的“四捨五入”。
原文見 https://www.cnblogs.com/wangsaiming/p/4644790.html
<script type=
"text/javascript"
>
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
+
""
;
};
&