JS toFixed 四捨五入問題

   最近在對JS浮點數作運算的時候,涉及到結果的四捨五入時,利用JS的toFixed(n),對運算結果進行四捨五入,忽然間相同的數據在IE8和IE9得出的結果不一致,在排除和程序邏輯問題後,把問題定位在了不一樣瀏覽器對toFixed結果的差別上,而後找到了谷老師發現不一樣的瀏覽器獲得的結果不一致,即便相同瀏覽器的不一樣版本toFixed獲得的結果頁不一致。瀏覽器

  想到了一個解決方法,不知能否,主要是經過提高小數至整數,就近取整後再恢復爲小數,代碼以下code

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;
}
相關文章
相關標籤/搜索