bigdecimal通常在涉及到精確計算的時候會用到,下面是自己多次錯誤使用bigdecimal的總結。
bigdecimal初始化小數時,盡量用字串形式,例如new bigdecimal("0.1");
bigdecimal型別變數比較大小時用compareto方法,判斷變數值是否為0,與bigdecimal.zero比較大小。
bigdecimal作除法時,除了要考慮除數是否為0,更要考慮是否能除盡的問題,直接呼叫bigdecimaldivide(bigdecimal divisor, int scale, int roundingmode)方法做除法可以避免除不盡的問題。
//bigdecimal初始化
public
static
void
testbigdecimalinit()
結論:盡量用字串的形式初始化,因為小數在計算機內部根本沒法精確表示。
比較bigdecimal型別的變數和0的大小,用compareto,不要用equals:
if (num1.compareto(bigdecimal.zero)>0)if (num1.compareto(bigdecimal.zero)<0)
if (num1.compareto(bigdecimal.zero)==0)
//比較大小
public
static
void
testbigdecimalcompareto()
if (!(num1 ==num2))
if (num1.compareto(num2) == 0)
}
結論:比較大小或者值是否相等,用compareto方法
在出現除不盡的時候,會出現問題,例如1/3的問題:
//bigdecimal除法
public
static
void
testbigdecimaldivide()
結論:只有在divide的時候就設定好要精確的小數字數和捨入模式,才能避免出現無法精確表達除不盡的問題。
BigDecimal除法精確計算及坑點
bigdecimal通常在涉及到精確計算的時候會用到,下面是自己多次錯誤使用bigdecimal的總結。bigdecimal初始化小數時,盡量用字串形式,例如new bigdecimal 0.1 bigdecimal型別變數比較大小時用compareto方法,判斷變數值是否為0,與bigdecima...
關於BigDecimal 的不精確計算問題
關於bigdecimal 的不精確計算問題 public static void main string args 輸入結果為 504.549999999999982946974341757595539093017578125 實際結果應為 504.55 現在作了如下函式,可以解決一部分處理,但是測...
BigDecimal的精確運算
float和double型別,執行二進位制浮點運算,數值範圍上精確的近似計算,沒有完全精確的結果,商業計算往往要求結果精確,這時候使bigdecimal。使用bigdecimal做處理,資料來源是double型別要轉化為double.tostring 然後使用string型別的構造器來進行計算 1....