BigDecimal使用および異常処理
2992 ワード
/** * * @param bd * @param num , num = 2 * @return */
public static String formatPrice(BigDecimal bd,int num){
if(bd == null || num < 0){
return null;
}
bd = bd.setScale(num, BigDecimal.ROUND_HALF_UP);
return bd + "";
}
BigDecimal.ROUND_HALF_UP " "
/** * * @param bd * @return */
public static String yuanToCent(BigDecimal bd){
if(bd == null){
return null;
}
bd = bd.multiply(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_EVEN);
return bd + "";
}
setScale(0, BigDecimal.ROUND_HALF_EVEN) " " , .
異常処理:BigDecimalによる除算計算時にjavaを放出する.lang.ArithmeticException: Non-terminating decimal expansion; No exact representable decimal result異常.例えばnew BigDecimal(30)を用いる.divide(new BigDecimal(7))はこの異常を投げ、異常原因:BigDecimalのdivide法で除算を行う際に整然と除かず、無限循環小数が現れるとこの異常を投げ出す.
解決策:divideに正確な小数点数ビット数または「丸め」モードを設定します.
`new BigDecimal(30).divide(new BigDecimal(7), BigDecimal.ROUND_HALF_UP).setScale(2,BigDecimal.ROUND_HALF_UP)`
new BigDecimal(30).divide(new BigDecimal(7), 2, BigDecimal.ROUND_HALF_UP)
,