package com.zy.asrs.utils;
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
|
public class MathUtils {
|
|
|
// 默认除法运算精度
|
private static final int DEFAULT_DIV_SCALE = 10;
|
|
/**
|
* 精确加法
|
*/
|
public static BigDecimal add(BigDecimal... values) {
|
BigDecimal result = BigDecimal.ZERO;
|
for (BigDecimal value : values) {
|
result = result.add(value);
|
}
|
return result;
|
}
|
|
/**
|
* 精确加法
|
*/
|
public static Double add(Double... values) {
|
BigDecimal result = BigDecimal.ZERO;
|
for (Double value : values) {
|
result = result.add(BigDecimal.valueOf(value));
|
}
|
return result.doubleValue();
|
}
|
|
/**
|
* 精确减法
|
*/
|
public static BigDecimal subtract(BigDecimal a, BigDecimal b) {
|
return a.subtract(b);
|
}
|
|
/**
|
* 精确减法
|
*/
|
public static Double subtract(Double a, Double b) {
|
return BigDecimal.valueOf(a).subtract(BigDecimal.valueOf(b)).doubleValue();
|
}
|
|
/**
|
* 精确乘法
|
*/
|
public static BigDecimal multiply(BigDecimal... values) {
|
BigDecimal result = BigDecimal.ONE;
|
for (BigDecimal value : values) {
|
result = result.multiply(value);
|
}
|
return result;
|
}
|
|
/**
|
* 精确除法,默认保留10位小数,四舍五入
|
*/
|
public static BigDecimal divide(BigDecimal a, BigDecimal b) {
|
return a.divide(b, DEFAULT_DIV_SCALE, RoundingMode.HALF_UP);
|
}
|
|
/**
|
* 精确除法,自定义精度和舍入模式
|
*/
|
public static BigDecimal divide(BigDecimal a, BigDecimal b, int scale, RoundingMode mode) {
|
return a.divide(b, scale, mode);
|
}
|
|
/**
|
* 比较大小:a > b 返回 1;a < b 返回 -1;相等返回 0
|
*/
|
public static int compare(BigDecimal a, BigDecimal b) {
|
return a.compareTo(b);
|
}
|
|
/**
|
* 转换为字符串输出,自动去除无效零
|
*/
|
public static String toPlainString(BigDecimal value) {
|
return value.stripTrailingZeros().toPlainString();
|
}
|
}
|