From 13b31b2ca2a5f8600002a042b536c9d5529842e3 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 09 三月 2026 19:21:18 +0800
Subject: [PATCH] #

---
 src/main/java/com/core/common/Arith.java |   77 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 77 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/core/common/Arith.java b/src/main/java/com/core/common/Arith.java
new file mode 100644
index 0000000..a5d56d0
--- /dev/null
+++ b/src/main/java/com/core/common/Arith.java
@@ -0,0 +1,77 @@
+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();
+    }
+}

--
Gitblit v1.9.1