package com.core.common;
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
|
public class Arith {
|
|
private enum ArithType {
|
ADD(0),
|
DIVIDE(1),
|
SUBTRACT(2),
|
MULTIPLY(3);
|
|
private final int value;
|
|
ArithType(int value) {
|
this.value = value;
|
}
|
|
public int getValue() {
|
return value;
|
}
|
}
|
|
public static double add(int scale, Number... nums) {
|
return getAirth(scale, ArithType.ADD.getValue(), nums);
|
}
|
|
public static double subtract(int scale, Number... nums) {
|
return getAirth(scale, ArithType.SUBTRACT.getValue(), nums);
|
}
|
|
public static double multiplys(int scale, Number... nums) {
|
return getAirth(scale, ArithType.MULTIPLY.getValue(), nums);
|
}
|
|
public static double divides(int scale, Number... nums) {
|
return getAirth(scale, ArithType.DIVIDE.getValue(), nums);
|
}
|
|
public static int percentage(Number... nums) {
|
return (int) (divides(2, nums) * 100);
|
}
|
|
public static double remainder(Number... nums) {
|
return new BigDecimal(nums[0].toString())
|
.remainder(new BigDecimal(String.valueOf(nums[1])))
|
.doubleValue();
|
}
|
|
private static double getAirth(int scale, int type, Number... nums) {
|
if (nums == null || nums.length == 0) {
|
return 0D;
|
}
|
BigDecimal result = new BigDecimal(nums[0].toString());
|
for (int i = 1; i < nums.length; i++) {
|
BigDecimal current = new BigDecimal(String.valueOf(nums[i]));
|
switch (type) {
|
case 0:
|
result = result.add(current);
|
break;
|
case 1:
|
result = result.divide(current, scale, RoundingMode.HALF_UP);
|
break;
|
case 2:
|
result = result.subtract(current);
|
break;
|
case 3:
|
result = result.multiply(current);
|
break;
|
default:
|
return 0D;
|
}
|
}
|
return result.setScale(scale, RoundingMode.HALF_UP).doubleValue();
|
}
|
}
|