java中BigDecimal資料型別的認知
阿新 • • 發佈:2019-02-08
在專案中,只要涉及到金額的計算的,一般會使用BigDecimal這個型別,最近的專案中葉遇到了。
首先明確的是:Java中的浮點數型別的float和double是不能夠用來進行資金的運算。
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提供了精確的基本的運算的方法,直接可以拿來用十分方便。
下次看到就不用怕了。