package xxxx; import java.math.BigDecimal; /** * MoneyUtil 金额的 加/减/乘/除 * 由于 double 精度无法保证, 用 BigDecimal 处理 * @author xuyinglong */ public class MoneyUtil { /** d1+d2 */ public static double add(double d1, double d2) { BigDecimal a1 = new BigDecimal(Double.toString(d1)); BigDecimal b1 = new BigDecimal(Double.toString(d2)); double d = a1.add(b1).doubleValue(); return d; } /** 多个累加 a + b + ... + n */ public static double adds(double... args) { double sum = 0.0; for (int i = 0; i < args.length; i++) { sum = add(sum, args[i]); } return sum; } /** d1-d2 */ public static double sub(double d1, double d2) { BigDecimal a1 = new BigDecimal(Double.toString(d1)); BigDecimal b1 = new BigDecimal(Double.toString(d2)); return a1.subtract(b1).doubleValue(); } /** d1*d2 */ public static double mul(double d1, double d2) { BigDecimal bd1 = new BigDecimal(Double.toString(d1)); BigDecimal bd2 = new BigDecimal(Double.toString(d2)); return bd1.multiply(bd2).doubleValue(); } /** d1/d2 */ public static double div(double d1, double d2, int scale) { if (d2 == 0) return 0.0; BigDecimal bd1 = new BigDecimal(Double.toString(d1)); BigDecimal bd2 = new BigDecimal(Double.toString(d2)); return bd1.divide(bd2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } }
Java浮点计算金额精度问题
43 min read