2012-01-26 23 views
2

我有一個問題,用下面的語句添加2十進制數給出錯誤的結果,在動作腳本

跟蹤(10.12 + 13.75) //輸出23.869999999999997

任何人能解釋我爲什麼會這樣,以及如何得到確切的23.87出這個?

謝謝

+1

檢查了這一點 http://stackoverflow.com/questions/2214003/is-there-a-fixed-point-library-for-actionscript-3 –

+0

謝謝!我在做相似的一個Allan –

回答

1

這是因爲IEEE格式的精度而發生的。

最簡單的就是使用toFixed。

var num:Number = 10.12+13.75; 
var numStr:String = num.toFixed(2); 
var num2:Number = new Number(numStr); 
+0

Pranav,num2應該是Number類型。 – AsTheWormTurns

+0

num = Math.round(num * 100)/ 100;這會好嗎? –

+0

@AsTheWorm翻滾! –

4

計算機浮點數不完全準確。 JavaScript(並且我假定使用ActionScript,因爲它是變體)使用64-bit IEEE 754 valuesECMAScript spec ref)。這種不精確的最好例子可能是0.1 + 0.2,它出現在0.30000000000000004。要獲得23.87,您必須輪到。

如果你做金融數學,你可能(或可能不會)使用不小數數學,而不是IEEE浮點(一個類似於Java的BigDecimal類或C#的decimal型)庫會更好。但請注意,十進制類型有其自身的侷限性,例如無法準確表示1/3