public class DoubleUtil { /** * 很小的数值 用于double和0比较 存在尾差问题 ***/ private static final Double minVal = 0.00001; /** * 两个Double数相加 * * @param v1 * @param v2 * @return */ public static Double add(Double v1, Double v2) { BigDecimal b1 = new BigDecimal(v1.toString()); BigDecimal b2 = new BigDecimal(v2.toString()); return b1.add(b2).doubleValue(); } /** * 两个Double数相减 * * @param v1 * @param v2 * @return */ public static Double sub(Double v1, Double v2) { BigDecimal b1 = new BigDecimal(v1.toString()); BigDecimal b2 = new BigDecimal(v2.toString()); return b1.subtract(b2).doubleValue(); } /** * 两个Double数相乘 * * @param v1 * @param v2 * @return */ public static Double mul(Double v1, Double v2) { BigDecimal b1 = new BigDecimal(v1.toString()); BigDecimal b2 = new BigDecimal(v2.toString()); return b1.multiply(b2).doubleValue(); } /** * 两个Double数相乘,scale 小数位, 默认四舍五入的方式取整 * * @param v1 * @param v2 * @return */ public static Double mul(Double v1, Double v2, int scale) { if (v2 == 0) { return 0d; } BigDecimal b1 = new BigDecimal(v1.toString()); BigDecimal b2 = new BigDecimal(v2.toString()); return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } /** * 两个Double数相乘, scale 小数位 * * @param v1 * @param v2 * @return */ public static Double mul(Double v1, Double v2, int scale, int roundingMode) { if (v2 == 0) { return 0d; } BigDecimal b1 = new BigDecimal(v1.toString()); BigDecimal b2 = new BigDecimal(v2.toString()); return b1.multiply(b2).setScale(scale, roundingMode).doubleValue(); } /** * 两个Double数相除,并保留scale位小数,默认四舍五入的方式 * * @param v1 除数 * @param v2 被除数 * @param scale * @return */ public static Double div(Double v1, Double v2, int scale) { if (v2 == 0 || Math.abs(v2) < minVal) { return 0.0d; } return div(v1, v2, scale, BigDecimal.ROUND_HALF_UP); } /** * 两个Double数相除,保留scale位小数,并且指定取舍类型 * * @param v1 除数 * @param v2 被除数 * @param scale * @param roundingMode BigDecimal.ROUND_HALF_UP, * BigDecimal.ROUND_UP,BigDecimal.ROUND_DOWN... * @return */ public static Double div(Double v1, Double v2, int scale, int roundingMode) { if (scale < 0) { throw new IllegalArgumentException("The scale must be a positive integer or zero"); } if (v2 == 0 || Math.abs(v2) < minVal) { return 0.0d; } BigDecimal b1 = new BigDecimal(v1.toString()); BigDecimal b2 = new BigDecimal(v2.toString()); return b1.divide(b2, scale, roundingMode).doubleValue(); } }
标签:return,BigDecimal,double,param,v1,v2,Double,工具,加减乘除 From: https://www.cnblogs.com/junjun1578/p/17797381.html