BigDecimalUtil工具类
public class BigDecimalUtil {
/**
* 判断字符串是否为空
*
* @param str 字符串
* @return 如果字符串为null或空字符串返回true,否则返回false
*/
public static boolean isEmpty(String str) {
return str == null || str.trim().length() == 0;
}
/**
* 将字符串转换为BigDecimal类型,如果字符串为空则返回BigDecimal.ZERO
*
* @param str 字符串
* @return BigDecimal类型的值
*/
public static BigDecimal strToBigDecimal(String str) {
if (isEmpty(str)) {
return BigDecimal.ZERO;
}
return new BigDecimal(str);
}
/**
* 加法运算
*
* @param num1 加数1,可以为String或BigDecimal类型
* @param num2 加数2,可以为String或BigDecimal类型
* @return 两数之和
*/
public static BigDecimal add(Object num1, Object num2) {
BigDecimal bd1 = convertToBigDecimal(num1);
BigDecimal bd2 = convertToBigDecimal(num2);
return bd1.add(bd2);
}
/**
* 减法运算
*
* @param num1 被减数,可以为String或BigDecimal类型
* @param num2 减数,可以为String或BigDecimal类型
* @return 两数之差
*/
public static BigDecimal subtract(Object num1, Object num2) {
BigDecimal bd1 = convertToBigDecimal(num1);
BigDecimal bd2 = convertToBigDecimal(num2);
return bd1.subtract(bd2);
}
/**
* 乘法运算
*
* @param num1 被乘数,可以为String或BigDecimal类型
* @param num2 乘数,可以为String或BigDecimal类型
* @return 两数之积
*/
public static BigDecimal multiply(Object num1, Object num2) {
BigDecimal bd1 = convertToBigDecimal(num1);
BigDecimal bd2 = convertToBigDecimal(num2);
return bd1.multiply(bd2);
}
/**
* 除法运算
*
* @param num1 被除数,可以为String或BigDecimal类型
* @param num2 除数,可以为String或BigDecimal类型
* @param scale 精确小数位数
* @return 两数之商
*/
public static BigDecimal divide(Object num1, Object num2, int scale) {
BigDecimal bd1 = convertToBigDecimal(num1);
BigDecimal bd2 = convertToBigDecimal(num2);
bd1=BigDecimalUtil.multiply(bd1,"10000");
bd2=BigDecimalUtil.multiply(bd2,"10000");
return bd1.divide(bd2, scale, BigDecimal.ROUND_HALF_UP);
}
/**
* 比较大小
*
* @param num1 数1,可以为String或BigDecimal类型
* @param num2 数2,可以为String或BigDecimal类型
* @return num1 > num2 返回1,num1 == num2 返回0,num1 < num2 返回-1
*/
public static int compare(Object num1, Object num2) {
BigDecimal bd1 = convertToBigDecimal(num1);
BigDecimal bd2 = convertToBigDecimal(num2);
return bd1.compareTo(bd2);
}
/**
* 将对象转换为BigDecimal类型
* @param obj 对象,可以为String或BigDecimal类型
* @return BigDecimal类型的值
*/
private static BigDecimal convertToBigDecimal(Object obj) {
if (obj instanceof BigDecimal) {
return (BigDecimal) obj;
} else if (obj instanceof String) {
return strToBigDecimal((String) obj);
} else {
throw new IllegalArgumentException("参数类型错误,只支持String和BigDecimal类型");
}
}
/**
* 获取Object类型的String值.
*
* @param
* @return
*/
public static String getNumberStr(Object obj) {
if (obj == null) {
return "0";
}
String str = obj.toString();
if ("".equals(str.trim()) || str.endsWith("null")) {
return "0";
}
if (isNumber(str)) {
return str;
}
return "0";
}
/**
* 验证是否为1-20位小数的正实数.
*
* @param str
* @return
*/
public static boolean isNumber(String str) {
Pattern pattern = Pattern.compile("^[0-9]+(.[0-9]{1,20})?$");
return pattern.matcher(str).matches();
}
}