| | |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | } |
| | | 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;
|
| | | }
|
| | | }
|
| | |
|
| | | }
|