2017-07-10 73 views
0

我從我的數據庫中獲取以下值當我做 resultSet.getdouble()轉換BigDecimal.toPlainString()來加倍執行算術運算

2.0006362409E9

我想在這個數字的算術運算。 我試圖讓使用BigDecimal.toPlainString()的實際值,然後我得到了下面的值

2000636240.900000095367431640625

當我嘗試BigDecimal.toPlainString轉換()翻一番我在科學記數法再次獲取值。

我想分這個數 - 我怎麼能解決這個問題?

+3

爲什麼科學記數法打擾你?您可以直接在'double'或'BigDecimal'上執行算術運算。符號只是一個打印的東西。 – RealSkeptic

+0

將舍入模式的比例設置爲BigDecimal對象。 –

+0

@SangamBelose也許你解釋了爲什麼你認爲*舍入*在這裏很重要。 – GhostCat

回答

4

爲了執行計算,您不一定必須轉換爲double

使用BigDecimal的問題在於它允許處理關於數字「需要」的所有方面的任意大數。含義:BigDecimal有多種計算方法,例如divide()。換句話說:除非您100%確定來自該數據庫的數字適合用於Java double值的range - 您可能只需使用BigDecimal對象「堅持」即可。任何使用原始雙精度的計算都可以使用BigDecimal類提供的方法來完成。

並且如果您的號碼位於範圍(您的示例表明如此) - 只需使用Double.valueOf(String)將該字符串轉換爲Double/double即可。那麼你會不是需要那BigDecimal「繞道」在第一位!

+0

一些downvotes我真的不明白...:o( –

+0

我想我的第一個版本並不太好。我不得不承認:我太懶惰了,首先檢查一下這個例子是否需要BigDecimal或者可以像普通的一樣。你也有很好的,精確的答案。 – GhostCat

4

您對內部編號表示用戶顯示有誤解。

要做像大量數字計算你的BigDecimal類它是正確的選擇。是的,您不能使用原始運營商(+/- ...)並且必須使用BigDecimal類(add(),subtract() ...)提供的方法。但是,作爲回報,您可以獲得幾乎無限的準確度,而使用原始值進行計算時,由於固定的數字長度,特別是在處理分數時,值具有固有的故障。