package com.ljq.durian.common.util; import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; /** * 精確計算工具類,提供加減乘除的計算 * * @author jqlin */ public class CompuUtils { /** 常量--0 */ public static final int ZERO = 0; /** 常量--1 */ public static final int ONE = 1; /** 常量-- -1 */ public static final int MINUS_ONE = -1; /** * 大小比較 * * @param a * @param b * @return 返回1, 表示a大於b <br/> * 返回0 ,表示a等於b <br/> * 返回-1,表示a小於b * @author jqlin */ public static int compareTo(String a, String b) { return new BigDecimal(a).compareTo(new BigDecimal(b)); } /** * 加法運算 * * @param a 被加數 * @param b 加數 * @author jqlin */ public static BigDecimal add(String a, String b) { MathContext mc = new MathContext(20, RoundingMode.HALF_UP); return new BigDecimal(a).add(new BigDecimal(b), mc); } /** * 累加運算 * * @param vals * @return * @author jqlin */ public static int add(int... vals) { if (vals == null || vals.length <= 0) { return 0; } int sum = 0; for (int val : vals) { sum = sum + val; } return sum; } /** * 累加運算 * * @param vals * @return * @author jqlin */ public static long add(long... vals) { if (vals == null || vals.length <= 0) { return 0L; } long sum = 0L; for (long val : vals) { sum = sum + val; } return sum; } /** * 減法運算 * * @param a 被減數 * @param b 減數 * @author jqlin */ public static BigDecimal subtract(String a, String b) { MathContext mc = new MathContext(20, RoundingMode.HALF_UP); return new BigDecimal(a).subtract(new BigDecimal(b), mc); } /** * 乘法運算 * * @param a 被乘數 * @param b 乘數 * @author jqlin */ public static BigDecimal multiply(String a, String b) { MathContext mc = new MathContext(20, RoundingMode.HALF_UP); return new BigDecimal(a).multiply(new BigDecimal(b), mc); } /** * 除法運算 * * @param a 被除數 * @param b 除數 * @author jqlin */ public static BigDecimal divide(String a, String b) { return new BigDecimal(a).divide(new BigDecimal(b), 20, BigDecimal.ROUND_HALF_UP); } public static void main(String[] args) { System.out.println(divide("10", "4")); } }