bigdecimal通常在涉及到精確計算的時候會用到,下面是自己多次錯誤使用bigdecimal的總結。
bigdecimal初始化小數時,盡量用字串形式,例如new bigdecimal("0.1");
bigdecimal型別變數比較大小時用compareto方法,判斷變數值是否為0,與bigdecimal.zero比較大小。
bigdecimal作除法時,除了要考慮除數是否為0,更要考慮是否能除盡的問題,
直接呼叫
bigdecimal
divide(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做除法時,盡量使用divide bigdecimal divisor,intscale,introundingmode 這個方法 divisor 被除數 scale保留小數字數 roundingmode保留小數時採用的方法,一般使用bigdecimal.round up 四捨五入...
BigDecimal的精確運算
float和double型別,執行二進位制浮點運算,數值範圍上精確的近似計算,沒有完全精確的結果,商業計算往往要求結果精確,這時候使bigdecimal。使用bigdecimal做處理,資料來源是double型別要轉化為double.tostring 然後使用string型別的構造器來進行計算 1....
BigDecimal除法運算報錯
今天在運用bigdecimal做除法運算的時候,錯誤如下 non terminating decimal expansion no exact representable decimal result 不是很明白為什麼會這個樣子,度娘告訴我是因為 bigdecimal 做除法運算,如果除的結果為無限...