2013-02-07 39 views
0

以下值給我錯誤的精度。僅觀察到具體的數字。這可能是一個浮動表示問題,但想知道具體原因。具體數字的浮點精度

String m = "154572.49"; //"154,572.49"; 
Float f = Float.parseFloat(m); 
System.out.println(f); 

輸出它是印刷是154572.48代替154572.49

+3

原因是你不能在有限的內存量中表示無限多的數字,比如32位浮點數。因此,您將始終獲得最接近的可表示數字。 – Ingo

回答

3

如果您希望十進制數字與您在Java中輸入的數字完全一致,請使用BigDecimal而不是float。

浮點數是對小數固有不準確的,因爲終止於十進制許多數字(例如0.1)以二進制和浮點數的重複號碼被存儲爲一個二進制表示。

+0

感謝您的回覆,是的,我非常習慣於'BigDecimal',但正在與我遇到的第三方庫合作。 –

1

你一定要讀這What Every Computer Scientist Should Know About Floating-Point Arithmetic

擠壓無窮多的實數爲有限位數需要一個近似表示。雖然有無限多的整數,但在大多數程序中,整數計算的結果可以存儲在32位中。相反,給定任意固定的位數,大多數使用實數的計算都會產生無法使用多位來精確表示的數量。因此,浮點計算的結果必須經過四捨五入以適應其有限表示。該舍入誤差是浮點計算的特徵。

+0

我正在通過相同的鏈接。謝謝!! –

1
浮法

提供一個十進制數的基部2表示。當你解析時,它解析的十進制數字的二進制表示幾乎不會是確切的。你可以從它的二進制表示中獲得.4856(嗯,我沒有做這個計算,只是猜測讓你知道)。

+0

謝謝@KMC,是的,我明白了。 –