1. 程式人生 > >java中BigDecimal資料型別的認知

java中BigDecimal資料型別的認知

 

在專案中,只要涉及到金額的計算的,一般會使用BigDecimal這個型別,最近的專案中葉遇到了。

首先明確的是:Java中的浮點數型別的floatdouble是不能夠用來進行資金的運算。

BigDecimal(double)是把一個double型別十進位制數構造為一個BigDecimal物件例項。

BigDecimal(String)是把一個以String表示的BigDecimal物件構造為BigDecimal物件例項。

注意:這個構造器的結果可能會有不可預知的結果。有人可能設想new BigDecimal(.1)等於.1是正確的,但它實際上是等於.1000000000000000055511151231257827021181583404541015625,這就是為什麼.1不能用一個double精確表示的原因,因此,這個被放進構造器中的長值並不精確的等於.1,儘管外觀看起來是相等的。

然而(String)構造器,則完全可預知的,new BigDecimal(“.1”)如同期望的那樣精確的等於.1,因此,(String)構造器是被優先推薦使用的。

一般set到實體中的時候會這樣寫:

xxxx.set(new BigDecimal(String).toString())

關鍵是:BigDecimal提供了精確的基本的運算的方法,直接可以拿來用十分方便。

下次看到就不用怕了。