float和double型別的主要設計目標是為了科學計算和工程計算。他們執行二進位制浮點運算,這是為了在廣域數值範圍上提供較為精確的快速近似計算而精心設計的。然而,它們沒有提供完全精確的結果,所以不應該被用於要求精確結果的場合。但是,商業計算往往要求結果精確,這時候就要使用bigdecimal啦。
bigdecimal 由任意精度的整數非標度值 和32 位的整數標度 (scale) 組成。如果為零或正數,則標度是小數點後的位數。如果為負數,則將該數的非標度值乘以 10 的負scale 次冪。因此,bigdecimal表示的數值是(unscaledvalue × 10-scale)。
可以處理任意長度的浮點數運算。
bigdecimal add(bigdecimal val) //bigdecimal 加法
bigdecimal subtract (bigdecimal val) //bigdecimal 減法
bigdecimal multiply (bigdecimal val) //bigdecimal 乘法
bigdecimal divide (bigdecimal val,roundingmode mode) 除法
引數型別為double的構造方法的結果有一定的不可預知性
盡量使用引數型別為string的建構函式。
bigdecimal都是不可變的(immutable)的,在進行每一步運算時,都會產生乙個新的物件,所以在做加減乘除運算時千萬要儲存操作後的值。
過bigdecimal的divide方法進行除法時當不整除,出現無限迴圈小數時,就會拋異常, 需要設定精確度;就是給divide設定精確的小數點 。
引數型別為double的構造方法的結果有一定的不可預知性,因為不能double表示為任何有限長度的二進位制小數,遇到這種情況先使用double.tostring(double)方法,然後使用bigdecimal(string)構造方法,將double轉換為string。要獲取該結果,請使用valueof(double)方法。
使用compareto方法來進行比較。返回的結果是int型別,-1表示小於,0是等於,1是大於。因為bigdecimal比較時,不僅比較值,而且還比較精度
java BigDecimal相關操作
在進行涉及金額計算,尤其是金融類的,對資料精度有嚴格的要求,所以這種場景,bigdecimal就派上用場了。一 建構函式 常用的兩種 1 bigdecimal a new bigdecimal 1.17745 傳string bigdecimal b new bigdecimal 5.17745 傳...
JAVA BigDecimal的一些用法
bigdecimal的比較大小 int a bigdemical.compareto bigdemical2 a 1,表示bigdemical小於bigdemical2 a 0,表示bigdemical等於bigdemical2 a 1,表示bigdemical大於bigdemical2 new b...
JAVA BigDecimal類 高精度計算
bigdecimal類在計算時能夠精確表示 計算浮點數不會丟失精度。public bigdecimal string val 例項化乙個高精度浮點數 public bigdecimal add bigdecimal augend 加 public bigdecimal subtract bigdec...