package com.zy.common.utils; import java.math.BigDecimal; import java.math.RoundingMode; public class Arith { public static double add(int dot, Number... numbers) { return getAirth(dot, Arith.ArithType.ADD.getValue(), numbers); } public static double subtract(int dot, Number... numbers) { return getAirth(dot, Arith.ArithType.SUBTRACT.getValue(), numbers); } public static double multiplys(int dot, Number... numbers) { return getAirth(dot, Arith.ArithType.MULTIPLY.getValue(), numbers); } public static double divides(int dot, Number... numbers) { return getAirth(dot, Arith.ArithType.DIVIDE.getValue(), numbers); } public static int percentage(Number... numbers) { return (int) (divides(2, numbers) * (double) 100.0F); } public static double remainder(Number... numbers) { return (new BigDecimal(numbers[0].toString())).remainder(new BigDecimal(String.valueOf(numbers[1]))).doubleValue(); } private static double getAirth(int dot, int arithType, Number... numbers) { if (numbers != null && numbers.length != 0) { BigDecimal bigDecimal = new BigDecimal(numbers[0].toString()); for (int i = 1; i < numbers.length; ++i) { switch (arithType) { case 0: bigDecimal = bigDecimal.add(new BigDecimal(String.valueOf(numbers[i]))); break; case 1: bigDecimal = bigDecimal.divide(new BigDecimal(String.valueOf(numbers[i])), dot, RoundingMode.HALF_UP); break; case 2: bigDecimal = bigDecimal.subtract(new BigDecimal(String.valueOf(numbers[i]))); break; case 3: bigDecimal = bigDecimal.multiply(new BigDecimal(String.valueOf(numbers[i]))); break; default: return (double) 0.0F; } } return bigDecimal.setScale(dot, RoundingMode.HALF_UP).doubleValue(); } else { return (double) 0.0F; } } private static enum ArithType { ADD("add", 0), DIVIDE("divide", 1), SUBTRACT("subtract", 2), MULTIPLY("multiply", 3); private String key; private int value; private ArithType(String key, int value) { this.key = key; this.value = value; } public int getValue() { return this.value; } } }