public class BigDecimalUtils {
/**
* 提供精確的加法運算
*
* @param v1 被加數
* @param v2 加數
* @param scale 保留scale 位小數
* @return 兩個參數的和
*/
public static String add(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("保留的小數位數必須大於零");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.add(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 提供精確的減法運算
*
* @param v1 被減數
* @param v2 減數
* @param scale 保留scale 位小數
* @return 兩個參數的差
*/
public static String sub(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("保留的小數位數必須大於零");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.subtract(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 提供精確的乘法運算
*
* @param v1 被乘數
* @param v2 乘數
* @param scale 保留scale 位小數
* @return 兩個參數的積
*/
public static String mul(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("保留的小數位數必須大於零");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 提供精確的除法運算。當發生除不盡的情況時,由scale參數指定精度,以後的數字四捨五入
*
* @param v1 被除數
* @param v2 除數
* @param scale 表示需要精確到小數點以後幾位
* @return 兩個參數的商
*/
public static String div(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("保留的小數位數必須大於零");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
BigDecimal divide = b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP);
// BigDecimal divide = b1.divide(b2);
return divide.toString();
}
/**
* 提供精確的小數位四捨五入處理
*
* @param v 需要四捨五入的數字
* @param scale 小數點後保留幾位
* @return 四捨五入後的結果
*/
public static double round(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("保留的小數位數必須大於零");
}
BigDecimal b = new BigDecimal(Double.toString(v));
return b.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精確的小數位四捨五入處理
*
* @param v 需要四捨五入的數字
* @param scale 小數點後保留幾位
* @return 四捨五入後的結果
*/
public static String round(String v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("保留的小數位數必須大於零");
}
BigDecimal b = new BigDecimal(v);
return b.setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 取餘數
*
* @param v1 被除數
* @param v2 除數
* @param scale 小數點後保留幾位
* @return 餘數
*/
public static String remainder(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("保留的小數位數必須大於零");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.remainder(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 比較大小
*
* @param v1 被比較數
* @param v2 比較數
* @return 如果v1 大於v2 則 返回true 否則false
*/
public static boolean compare(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
int bj = b1.compareTo(b2);
if (bj > 0)
return true;
else
return false;
}
}
1、DecimalFormat df=new DecimalFormat("#.00");
2、DecimalFormat df=new DecimalFormat("0.00");
#:沒有則爲空--> .00 如果小數點前爲0則爲空;結果爲.00
0:沒有則補0--> 0.00 如果小數點前爲0則爲0 ;結果爲0.00
df.format();