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(); } }