import com.google.common.base.Optional;
import java.math.BigDecimal;
public class Checkouts {
/**
*
* @param b1
* @param bn
* @return
*/
public static BigDecimal safeAdd(BigDecimal b1, BigDecimal... bn) {
if (null == b1) {
b1 = BigDecimal.ZERO;
}
if (null != bn) {
for (BigDecimal b : bn) {
b1 = b1.add(null == b ? BigDecimal.ZERO : b);
}
}
return b1;
}
public static Integer safeAdd(Integer b1, Integer... bn) {
if (null == b1) {
b1 = 0;
}
Integer r = b1;
if (null != bn) {
for (Integer b : bn) {
r += Optional.fromNullable(b).or(0);
}
}
return r > 0 ? r : 0;
}
/**
* 计算金额
*
* @param b1
* @param bn
* @return
*/
public static BigDecimal safeSubtract(BigDecimal b1, BigDecimal... bn) {
return safeSubtract(true, b1, bn);
}
public static BigDecimal safeSubtract(Boolean isZero, BigDecimal b1, BigDecimal... bn) {
if (null == b1) {
b1 = BigDecimal.ZERO;
}
BigDecimal r = b1;
if (null != bn) {
for (BigDecimal b : bn) {
r = r.subtract((null == b ? BigDecimal.ZERO : b));
}
}
return isZero ? (r.compareTo(BigDecimal.ZERO) == -1 ? BigDecimal.ZERO : r) : r;
}
public static Integer safeSubtract(Integer b1, Integer... bn) {
if (null == b1) {
b1 = 0;
}
Integer r = b1;
if (null != bn) {
for (Integer b : bn) {
r -= Optional.fromNullable(b).or(0);
}
}
return null != r && r > 0 ? r : 0;
}
public static <T extends Number> BigDecimal safeDivide(T b1, T b2){
return safeDivide(b1, b2, BigDecimal.ZERO);
}
public static <T extends Number> BigDecimal safeDivide(T b1, T b2, BigDecimal defaultValue) {
if (null == b1 || null == b2) {
return defaultValue;
}
try {
return BigDecimal.valueOf(b1.doubleValue()).divide(BigDecimal.valueOf(b2.doubleValue()), 2, BigDecimal.ROUND_HALF_UP);
} catch (Exception e) {
OdyExceptionFactory.log(e);
return defaultValue;
}
}
public static <T extends Number> BigDecimal safeMultiply(T b1, T b2, Integer scale) {
if (null == b1 || null == b2) {
return BigDecimal.ZERO;
}
if (scale != null){
return BigDecimal.valueOf(b1.doubleValue()).multiply(BigDecimal.valueOf(b2.doubleValue())).setScale(scale, BigDecimal.ROUND_HALF_UP);
}
return BigDecimal.valueOf(b1.doubleValue()).multiply(BigDecimal.valueOf(b2.doubleValue()));
}
public static <T extends Number> BigDecimal safeMultiply(T b1, T b2) {
return safeMultiply(b1, b2, null);
}
}
安全加减乘除
最新推荐文章于 2024-03-20 15:40:15 发布