import java.math.BigDecimal;
/**
* 金额转换 处理
*
* @author: Nemo
*/
public class BigDecimalUtils {
public final static BigDecimal PERCENTILE = new BigDecimal("0.01");// 百分比计算值
/**
* 可变长度的加法
*
* @param val1
* @param decimals
* @return
*/
public static BigDecimal add(BigDecimal val1, BigDecimal... decimals) {
if (isNull(val1)) {
val1 = new BigDecimal(0);
}
BigDecimal sum = val1;
for (BigDecimal decimal : decimals) {
if (isNull(decimal)) {
decimal = new BigDecimal(0);
}
sum = sum.add(decimal);
}
return sum;
}
/**
* 可变长度的减法
*
* @param val1
* @param decimals
* @return
*/
public static BigDecimal subtract(BigDecimal val1, BigDecimal... decimals) {
if (isNull(val1)) {
val1 = new BigDecimal(0);
}
BigDecimal subtract = val1;
for (BigDecimal decimal : decimals) {
if (isNull(decimal)) {
decimal = new BigDecimal(0);
}
subtract = subtract.subtract(decimal);
}
return subtract;
}
/**
* 除 val1 / val2
*
* @param val1
* @param val2
* @param scale
* @param roundingMode
* @return
*/
public static BigDecimal divide(BigDecimal val1, BigDecimal val2, int scale, int roundingMode) {
if (isNull(val1) || isZero(val1) || isNull(val2) || isZero(val2)) {
return new BigDecimal(0);
}
return val1.divide(val2, scale, roundingMode);
}
/**
* 可变长度乘法
*
* @param val1
* @param decimals
* @return
*/
public static BigDecimal multiply(BigDecimal val1, BigDecimal... decimals) {
if (isNull(val1)) {
val1 = new BigDecimal(0);
}
BigDecimal result = val1;
for (BigDecimal decimal : decimals) {
if (isNull(decimal)) {
decimal = new BigDecimal(0);
}
result = result.multiply(decimal);
}
return result;
}
/**
* 百分比计算
*
* @param val
* @return
*/
public static BigDecimal percent(BigDecimal val) {
if (isNull(val)) {
return BigDecimal.ZERO;
}
return PERCENTILE.multiply(val);
}
/**
* 判断是否为null
*
* @param val
* @return
*/
public static boolean isNull(BigDecimal val) {
return null == val;
}
public static BigDecimal nullToZero(BigDecimal val) {
if (isNull(val)) {
return new BigDecimal(0);
}
return val;
}
/**
* 判断是否为0
*
* @param val
* @return
*/
public static boolean isZero(BigDecimal val) {
if (isNull(val)) {
return true;
}
return val.compareTo(new BigDecimal(0)) == 0;
}
/**
* 去掉多余的0,如0012.0500变成12.05,转换为字符串
*
* @param val
* @return
*/
public static String toString(BigDecimal val) {
return nullToZero(val).stripTrailingZeros().toPlainString();
}
/**
* 等值判断
*
* @param val1
* @param val2
* @return
*/
public static int compareTo(BigDecimal val1, BigDecimal val2) {
return nullToZero(val1).compareTo(nullToZero(val2));
}
/**
* 小于0
*
* @param val
* @return
*/
public static boolean lessThanZero(BigDecimal val) {
return compareTo(val, BigDecimal.ZERO) < 0;
}
/**
* 小于等于0
*
* @param val
* @return
*/
public static boolean lessEqZero(BigDecimal val) {
return compareTo(val, BigDecimal.ZERO) <= 0;
}
/**
* 大于0
*
* @param val
* @return
*/
public static boolean greaterThanZero(BigDecimal val) {
return compareTo(val, BigDecimal.ZERO) > 0;
}
/**
* 大于等于0
*
* @param val
* @return
*/
public static boolean greaterEqZero(BigDecimal val) {
return compareTo(val, BigDecimal.ZERO) >= 0;
}
/**
* 将负数返回为0
*
* @param val1
* @return
*/
public static BigDecimal minus2Zero(BigDecimal val1) {
if(BigDecimal.ZERO.compareTo(val1) > 0){
return BigDecimal.ZERO;
}
return val1;
}
}