package com.zy.asrs.framework.common;
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
|
/**
|
* 四则运算
|
* Created by vincent on 2019-04-15
|
*/
|
public class Arith {
|
|
/**
|
* 加法
|
* @param dot 保留小数点
|
* @param numbers 数字类型
|
*/
|
public static double add(int dot, Number... numbers) {
|
return getAirth(dot, ArithType.ADD.getValue(), numbers);
|
}
|
|
/**
|
* 减法
|
* @param dot 保留小数点
|
* @param numbers 第一个是被减数
|
*/
|
public static double subtract(int dot, Number... numbers) {
|
return getAirth(dot, ArithType.SUBTRACT.getValue(), numbers);
|
}
|
|
/**
|
* 乘法
|
* @param dot 保留小数点
|
* @param numbers 乘法的因子
|
*/
|
public static double multiplys(int dot, Number... numbers) {
|
return getAirth(dot, ArithType.MULTIPLY.getValue(), numbers);
|
}
|
|
/**
|
* 除法
|
* @param dot 保留小数点
|
* @param numbers 除数,第一个是除数
|
*/
|
public static double divides(int dot, Number... numbers) {
|
return getAirth(dot, ArithType.DIVIDE.getValue(), numbers);
|
}
|
|
/**
|
* 获取百分比
|
* @param numbers 除数,第一个是除数
|
* @return 百分数 * 100
|
*/
|
public static int percentage(Number... numbers){
|
return (int) (divides(2,numbers) * 100);
|
}
|
|
/**
|
* 余数
|
* @param numbers
|
* @return
|
*/
|
public static double remainder(Number... numbers){
|
return new BigDecimal(numbers[0].toString()).remainder(new BigDecimal(String.valueOf(numbers[1]))).doubleValue();
|
}
|
|
/**
|
* 综合的运算
|
* @param dot 保留精度
|
* @param arithType 运算的类型
|
* @param numbers 需要运算的数字
|
*/
|
private static double getAirth(int dot, int arithType, Number... numbers) {
|
if (numbers == null || numbers.length == 0) {
|
return 0.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 0.00;
|
}
|
}
|
return bigDecimal.setScale(dot, RoundingMode.HALF_UP).doubleValue();
|
}
|
|
|
/**
|
* 运算的类型
|
*/
|
private enum ArithType {
|
ADD("add", 0),
|
DIVIDE("divide", 1),
|
SUBTRACT("subtract", 2),
|
MULTIPLY("multiply", 3);
|
@SuppressWarnings("unused")
|
private String key;
|
private int value;
|
ArithType(String key, int value) {
|
this.key = key;
|
this.value = value;
|
}
|
public int getValue() {
|
return value;
|
}
|
}
|
|
}
|