最近發現js當中tofixed()方法存在一些問題,採用原生的number物件的原型物件上的tofixed()方法時,規則並不是所謂的「四捨五入」或者是「四捨六入五成雙」,以谷歌瀏覽器為例:
alert(1.5451.tofixed(2));//輸出 1.55
alert(1.545.tofixed(2)); //輸出 1.54
alert(1.5551.tofixed(2)); //輸出 1.56
alert(1.555.tofixed(2)); //輸出 1.55
即:小數點後第三位5後面有數時進製,後面沒數時捨棄不進製
在浮點數末尾≤4或者≥6的情況下的捨入沒有爭議,但當末尾正好等於5的情況下可謂混亂之極(與瀏覽器有關,同樣的方法,在谷歌和ie上會有不同顯示)。
總結:眾所周知,遵循ieee754數值格式的語言的浮點計算會出現精度損耗的通病,es也並非獨此一家,因此盡量不要進行某個特定浮點數值的測試,如:0.1+0.2;
解決方案:重寫number.prototype.tofixed()方法:
number.prototype.tofixed=function (d) )?)\\d*$").test(s))else break;}}
s=a.join("").replace(new regexp("(\\d+)(\\d)\\d$"),"$1.$2");
}if(b)s=s.substr(1);
return (pm+s).replace(/\.$/,"");
}return this+"";
}
JS當中toFixed 方法5不進製問題處理
最近發現js當中tofixed 方法存在一些問題,採用原生的number物件的原型物件上的tofixed 方法時,規則並不是所謂的 四捨五入 或者是 四捨六入五成雙 以谷歌瀏覽器為例 在浮點數末尾 4或者 6的情況下的捨入沒有爭議,但當末尾正好等於5的情況下可謂混亂之極 與瀏覽器有關,同樣的方法,在...
JS中的toFixed 四捨五入方法
方法一 在js中四捨五入的函式 tofixed n n為要保留的小數字數。n為0 20,當n超過20的時候,js會出錯。如果小數點前和要擷取的前一位都是0時,不會按常理擷取。var h 0.07 h.tofixed 1 的值為0.0其實要解決這個問題,原來是不一定要重寫js中的number型別的to...
JS中toFixed 方法的問題及解決方案
測試瀏覽器 屌絲瀏覽器ie6以及高階屌絲瀏覽器ie78 此處為方便未使用原生ie678,不過ietester破天荒地表現良好,精確做法應該是乙個版本對應乙個虛擬機器來測試 和所有現代主流瀏覽器包括ie9 ie10 ff chrome opera safari。注 在使用ie10的類似firebug的...