float和double類型的主要為了科學計算和工程計算而設計的,它們執行二進制浮點運算,這時為了在廣泛的數值範圍上提供較為精確的近似計算而精心設計的。然而,它們沒有提供完全精確的結果,所以不應該被用來要求精確結果的場合。通常商業計算往往需要BigDecimal來計算精確要求比較高的數值。例如
0.07 + 0.020.58 - 0.421.005 * 10015.1 / 1000
#
#無論是在任何環境下,都需要將程式碼轉換為二進位機器碼才能讓機器識別,當浮點數直接輸出時,會保持精度,而當浮點數進行計算後,可能會失去精度,這時就需要BigDecimal來進行計算。
1.建立BigDecimal
BigDecimal中有一個以雙精確度浮點數為參數的建構函數,實際上傳入浮點數計算時還是會精確度遺失。
= BigDecimal(1.005= BigDecimal(100= BigDecimal("1.005"= BigDecimal("100"100.49999999999998934185896359849721193313598632812500 100.500
T
##
#但是可以發現傳入字串時得到了精確的結果,還有BigDecimal.valueOf(double val)也可以得到精確地結果,可以看下面BigDecimal.valueOf(double val)的源碼
public static BigDecimal valueOf(double val) {// Reminder: a zero double returns '0.0', so we cannot fastpath// to use the constant ZERO. This might be important enough to// justify a factory approach, a cache, or a few private// constants, later.return new BigDecimal(Double.toString(val)); }
2.compareTo
0.05).compareTo(BigDecimal.valueOf(0.040.04).compareTo(BigDecimal.valueOf(0.040.03).compareTo(BigDecimal.valueOf(0.04
#
BigDecimal.compareTo(BigDecimal val)
當BigDecimal比val大時回傳1,
###當BigDecimal小於val時回傳-1,######當BigDecimal等於val時回傳0。 ###### ###以上是BigDecimal是什麼?創建BigDecimal的實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!