很多同學在實際開始中都遇到過這樣的問題,就是在對商品價格進行計算的時候都出現了不精確的問題,下面我們就來看看;
/**
* a 乘以b
* @param chengshu
* @param beiChengShu
* @return
*/
public static String multiply(String chengshu, String beiChengShu) {
BigDecimal bigDecimal = new BigDecimal(chengshu);
BigDecimal bigDecimal2 = new BigDecimal(beiChengShu);
BigDecimal multiply = bigDecimal.multiply(bigDecimal2);
return multiply.toString();
}
/**
* a 除以b
* @param chushu
* @param beiChuShu
* @return
*/
public static String divide(String chushu, String beiChuShu) {
BigDecimal bigDecimal = new BigDecimal(chushu);
BigDecimal bigDecimal2 = new BigDecimal(beiChuShu);
BigDecimal multiply = bigDecimal.divide(bigDecimal2);
return multiply.toString();
}
/**
* a 加b
* @param jiashu
* @param beiJiaShu
* @return
*/
public static String add(String jiashu, String beiJiaShu) {
BigDecimal bigDecimal = new BigDecimal(jiashu);
BigDecimal bigDecimal2 = new BigDecimal(beiJiaShu);
BigDecimal multiply = bigDecimal.add(bigDecimal2);
return multiply.toString();
}
/**
* a 減b
* @param jianshu
* @param beiJianShu
* @return
*/
public static String subtract(String jianshu, String beiJianShu) {
BigDecimal bigDecimal = new BigDecimal(jianshu);
BigDecimal bigDecimal2 = new BigDecimal(beiJianShu);
BigDecimal multiply = bigDecimal.subtract(bigDecimal2);
return multiply.toString();
}
/**
* 保留2位小數,第三位四捨五入
* @param
* @return
*/
public static String hasTwo(Object target) {
DecimalFormat format = new DecimalFormat("#.00");
return format.format(target);
}
另外一種除法比較靈活:
bigDecimal.divide(new BigDecimal("1000"),3,BigDecimal.ROUND_HALF_DOWN)
BigDecimal bigDecimal = new BigDecimal("1.2022");
System.err.println("ROUND_DOWN="+bigDecimal.setScale(1, BigDecimal.ROUND_DOWN));//只取小數點後一位,不管下一位
System.err.println("ROUND_UP="+bigDecimal.setScale(1, BigDecimal.ROUND_UP));//只要有後面有數字就向上進以爲,0除過
System.err.println("ROUND_HALF_UP="+bigDecimal.setScale(1, BigDecimal.ROUND_HALF_UP));//下一位大於等於0.5就會向上進一位,否則只取小數點後一位
System.err.println("ROUND_HALF_DOWN="+bigDecimal.setScale(1, BigDecimal.ROUND_HALF_DOWN));//去小數點後1爲,除非下一位大於0.5纔會向上進一位