2010-12-04 89 views
1

我已經在Java System.out.print(1-.6)打印.4中試驗了float和double類型有什麼問題,結果有點意外(0.30000000000000004)是System.out.print(1-0.7)。如果有人能夠指導我解釋某些資源來解釋爲什麼會發生,那將會很有幫助。我假設它不是Java特定的,這些類型本身就是錯誤的。Float和Double爲貨幣值

謝謝!

+0

http://docs.sun.com/source/806-3568/ncg_goldberg.html – 2010-12-04 17:12:01

+1

http://stackoverflow.com/questions/285680/representing-monetary-values-in-java給出了最好的建議。使用BigDecimal。 – 2010-12-04 17:16:17

+1

我覺得這是一個持續娛樂的來源,在目前的1,123,061個問題中,67%的問題與浮點錯誤有關:-) – paxdiablo 2010-12-04 17:17:08

回答

1

如所述文森特floatdouble類型不能存儲將不被表示爲2^-n值(Ñ大小取決於實現)的總和值。

改爲使用BigDecimal類。