最近在对JS浮点数做运算的时候,涉及到结果的四舍五入时,利用JS的toFixed(n),对运算结果进行四舍五入,突然间相同的数据在IE8和IE9得出的结果不一致,在排除和程序逻辑问题后,把问题定位在了不同浏览器对toFixed结果的差异上,然后找到了谷老师发现不同的浏览器得到的结果不一致,即使相同浏览器的不同版本toFixed得到的结果页不一致。
想到了一个解决方法,不知可否,主要是通过提升小数至整数,就近取整后再恢复为小数,代码如下
function round(num,n){
var dd=1;
var tempnum;
for(i=0;i<n;i++){
dd*=10;
}
tempnum=num*dd;
tempnum=Math.round(tempnum);
return formatnumber((tempnum/dd).toFixed(n),n);
}
//对小数格式化,四舍五入,不足补零
function formatnumber(value, num){
var a, b, c, i;
a = value.toString();
b = a.indexOf(".");
c = a.length;
if (num == 0){
if (b != -1){
a = a.substring(0, b);
}
} else{
if (b == -1){
a = a + ".";
for (i = 1; i <= num; i++){
a = a + "0";
}
} else{
a = a.substring(0, b + num + 1);
for (i = c; i <= b + num; i++){
a = a + "0";
}
}
}
return a;
}