2010-05-28 167 views
0

可能重複:
Dealing with accuracy problems in floating-point numbers爲什麼99.99/100 = 0.9998999999999999

而99.99 * 0.01 = 0.99

顯然,這是古老的浮點舍入的問題,但是在這種情況下,舍入誤差對我來說似乎相當大;我的意思是我可能預期結果爲0.99990000001或類似的「接近」結果。

爲了記錄,我在JavaVM和.Net環境中得到了相同的答案。

+0

這已被問了很多次之前,在這裏 - http://stackoverflow.com/questions/590822/dealing-with-accuracy-problems-in-floating-point-numbers-只是一個例子 – ChrisF 2010-05-28 15:35:45

+4

這個答案之間的區別和0.99990000001是一樣的。你意識到這一點,對吧? – SilentGhost 2010-05-28 15:36:33

+0

它* *與您預期的相近。 – 2010-05-28 15:36:53

回答

5

爲什麼0.9998999999999999對你來說不夠近(而0.9999000000000001好)?
abs(0.9999 - 0.9998999999999999)== abs(0.9999 - 0.9999000000000001)

+0

啊,是的,0.999 * 8 * 好吧,發現了。 – redcalx 2010-05-28 15:43:56

2

這是一個浮點錯誤。對於(很多)更多的細節請看wikipedia article。如果您需要精確的分數結果,請使用decimal(請參閱here)。

+1

或者更確切地說,如果您正在進行計算,結果的**十進制表示**很重要,則使用「decimal」。 – 2010-05-28 15:42:48

+1

丹尼爾是對的:十進制表示法並不比二元準確得多。但它與我們通常使用的算術相匹配,所以當需要與現有流程完全匹配時(如在許多財務工作中),請使用十進制。 – 2010-05-28 15:56:56