我有一個問題,用下面的語句添加2十進制數給出錯誤的結果,在動作腳本
跟蹤(10.12 + 13.75) //輸出23.869999999999997
任何人能解釋我爲什麼會這樣,以及如何得到確切的23.87出這個?
謝謝
我有一個問題,用下面的語句添加2十進制數給出錯誤的結果,在動作腳本
跟蹤(10.12 + 13.75) //輸出23.869999999999997
任何人能解釋我爲什麼會這樣,以及如何得到確切的23.87出這個?
謝謝
這是因爲IEEE格式的精度而發生的。
最簡單的就是使用toFixed。
var num:Number = 10.12+13.75;
var numStr:String = num.toFixed(2);
var num2:Number = new Number(numStr);
Pranav,num2應該是Number類型。 – AsTheWormTurns
num = Math.round(num * 100)/ 100;這會好嗎? –
@AsTheWorm翻滾! –
計算機浮點數不完全準確。 JavaScript(並且我假定使用ActionScript,因爲它是變體)使用64-bit IEEE 754 values(ECMAScript spec ref)。這種不精確的最好例子可能是0.1 + 0.2
,它出現在0.30000000000000004
。要獲得23.87
,您必須輪到。
如果你做金融數學,你可能(或可能不會)使用不小數數學,而不是IEEE浮點(一個類似於Java的BigDecimal
類或C#的decimal
型)庫會更好。但請注意,十進制類型有其自身的侷限性,例如無法準確表示1/3
。
檢查了這一點 http://stackoverflow.com/questions/2214003/is-there-a-fixed-point-library-for-actionscript-3 –
謝謝!我在做相似的一個Allan –