2013-08-07 33 views
4

我HAVA浮動丟失數據時,分浮動由1000

float data = 24931192; 

當我1000

data = data/1000; 

把它寄回給我24931.191。誰能告訴我爲什麼?我如何防止它? 謝謝

+1

使用'java.math.BigDecimal'類型。 – adatapost

+1

浮點數沒有無限精度。你最終總會遇到這樣的問題。請參閱[本頁](http://floating-point-gui.de/)進行更全面的討論。 – 2013-08-07 04:14:02

回答

5

浮點數/浮點數只有很高的精度(在Java中精確度爲23位),而且您只是遇到了精度不夠高的問題。如果花車不夠,嘗試使用雙打,儘管最終會遇到問題。

1

浮點數據類型沒有無限精度,所以你會看到這樣的小怪癖。一個選項(如果你真的想要一個浮點結果)是以雙精度執行操作,然後強制浮點運算。另一種選擇是使用BigDecimal而不是浮動。

1

浮點值(floatdouble)是近似值。您可能會看到四捨五入錯誤,並且實際上無法準確表示某些值。想想1/3 = 0.333333...:最後數字的存儲插槽用完了,最後用'(1/3)* 3 = 0.999999 ...「

大多數用途不需要足夠精確的答案, 。double如果你這樣做,看看BigDecimal,這是慢得多