我使用toFixed時遇到的舍入誤差:toFixed(2)rounds「x.525」inconsistently?
我在我的數值計算中使用toFixed(2)
,但是舍入結果並不如預期的少數病例。
假設toFixed(2)
適用於價值17.525
然後給出結果17.52
,而如果它用於5.525
然後給出結果5.53
。
在後面的情況下,舍入結果是準確的,所以請您建議需要做些什麼來獲得準確的舍入結果,如後面的情況。或者你能否建議一個替代這個toFixed函數來獲得正確的舍入結果?
我使用toFixed時遇到的舍入誤差:toFixed(2)rounds「x.525」inconsistently?
我在我的數值計算中使用toFixed(2)
,但是舍入結果並不如預期的少數病例。
假設toFixed(2)
適用於價值17.525
然後給出結果17.52
,而如果它用於5.525
然後給出結果5.53
。
在後面的情況下,舍入結果是準確的,所以請您建議需要做些什麼來獲得準確的舍入結果,如後面的情況。或者你能否建議一個替代這個toFixed函數來獲得正確的舍入結果?
將數字轉換爲字符串並使用它?
這是我嘗試使用Math.round或Math.ceil模擬最近舍入後的最後一招,但失敗了。當乘以100時,某些數字(如17.525)會比其值(1752.5)的100倍少一些,而其他數字(如17.545)會比其值(1754.5)的100倍多一點。
我不完全確定如何將數字轉換爲字符串會有所幫助......只是看起來更多的工作。 – 2012-05-26 17:22:23
我們將使用十進制表示而不是數字的二進制表示。當我們在舍入之前和之後打印值時,它是「視覺上正確的」。 – nhahtdh
代替toFixed()
使用Math.ceil()
,Math.floor()
或Math.round()
一個辦法像
var rnum = 5.525,
decimalPlaces = 2,
factor = Math.pow(10, decimalPlaces),
newnumber = Math.round(rnum * factor)/factor,
mydecimalvalue = parseFloat(newnumber);
結果周圍是5.53
但是,這些返回整數值......這裏如何使用它? – 2012-05-26 17:20:56
是的,但該鏈接是關於'toFixed(0)',而不是'toFixed(2)'... – 2012-05-26 17:23:19
將數字乘以100後,數字已經失去了精度,因此使用這些方法並不能真正幫助。 – nhahtdh
僅供參考,這有什麼好做的jQuery。這是一個JavaScript函數https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Number/toFixed。 – alexn
這個結果非常好。尾數指數浮點數是一個謊言。嘗試'toFixed(20)'然後比較。 – 2012-05-26 16:59:52
[Using toFixed(2)and math round to get correct rounding](http://stackoverflow.com/questions/2861055/using-tofixed2-and-math-round-to-get-correct-rounding) – 2012-05-26 17:01:10