2012-06-07 54 views
1

如何將字符串解析爲文字double值?我有一組概率值,我使用Double.valueOf(probabilityString)解析,需要精確地加到1.0djava從字符串解析double值作爲文字值

例如,當概率字符串爲0.2, 0.5, 0.2, 0.1時,雙倍值的結果總和爲0.999999...

我想要的是將雙值解析爲0.2d, 0.5d, 0.2d, 0.1d,這可能嗎?

我正在處理接受double[]作爲參數的第三方庫,如果雙精度值沒有精確地加總到1.0d,則拋出異常。

+0

你需要的東西精度高於浮點數即可。這就是浮點數的工作方式。某些數字不能完全表示,所以將這些數字相加並不能得出您期望的結果。 – Corbin

+1

您需要假設0.9999999999999999與1.0非常接近,無關緊要。 –

+0

奇怪的第三方庫,使這個假設。 – jontro

回答

4

雙打只有64位長。有一個無限的實數。因此,不可能將每個真實數據精確地表示爲64位雙精度值。所以使用雙打總是會導致近似結果。如果您需要絕對精確度,請使用BigDecimal。

+0

+1這裏有一個無窮大的整數,*表示每個整數都有一個無窮大的實數。 ;) –

0

使用可用於Java的BigDecimal

請參閱this link,它一定會幫助你。

讓我知道如果您有任何問題。

0

試試這個:

DecimalFormat df =(DecimalFormat)NumberFormat.getInstance(); 
df.setParseBigDecimal(true); 
BigDecimal bd = (BigDecimal) df.parse(probabilityString);