diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 0a3aa2a..968b4f9 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -10,7 +10,7 @@
-
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index b26911b..af673e7 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -2,5 +2,7 @@
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_4_7.xml b/.idea/libraries/Maven__junit_junit_4_7.xml
deleted file mode 100644
index 1c50f8b..0000000
--- a/.idea/libraries/Maven__junit_junit_4_7.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/EasyCaptcha.iml b/EasyCaptcha.iml
index f1dd1f9..8b16381 100644
--- a/EasyCaptcha.iml
+++ b/EasyCaptcha.iml
@@ -1,16 +1,18 @@
-
+
+
-
+
+
\ No newline at end of file
diff --git a/src/main/java/com/wf/captcha/base/ArithHelper.java b/src/main/java/com/wf/captcha/base/ArithHelper.java
index 492f4af..eeb739b 100644
--- a/src/main/java/com/wf/captcha/base/ArithHelper.java
+++ b/src/main/java/com/wf/captcha/base/ArithHelper.java
@@ -1,137 +1,104 @@
package com.wf.captcha.base;
+import java.math.BigDecimal;
+
/**
* 字符串计算器辅助类
- * @link https://www.cnblogs.com/woider/p/5331391.html
*/
class ArithHelper {
// 默认除法运算精度
private static final int DEF_DIV_SCALE = 16;
+ private static final String ONE = "1";
// 这个类不能实例化
private ArithHelper() {
}
+ // 将double转换为BigDecimal
+ private static BigDecimal convertToBigDecimal(double value) {
+ return new BigDecimal(Double.toString(value));
+ }
+
+ // 将String转换为BigDecimal
+ private static BigDecimal convertToBigDecimal(String value) {
+ return new BigDecimal(value);
+ }
+
/**
* 提供精确的加法运算。
- *
- * @param v1 被加数
- * @param v2 加数
- * @return 两个参数的和
*/
-
public static double add(double v1, double v2) {
- java.math.BigDecimal b1 = new java.math.BigDecimal(Double.toString(v1));
- java.math.BigDecimal b2 = new java.math.BigDecimal(Double.toString(v2));
- return b1.add(b2).doubleValue();
+ return convertToBigDecimal(v1).add(convertToBigDecimal(v2)).doubleValue();
}
public static double add(String v1, String v2) {
- java.math.BigDecimal b1 = new java.math.BigDecimal(v1);
- java.math.BigDecimal b2 = new java.math.BigDecimal(v2);
- return b1.add(b2).doubleValue();
+ return convertToBigDecimal(v1).add(convertToBigDecimal(v2)).doubleValue();
}
/**
* 提供精确的减法运算。
- *
- * @param v1 被减数
- * @param v2 减数
- * @return 两个参数的差
*/
-
public static double sub(double v1, double v2) {
- java.math.BigDecimal b1 = new java.math.BigDecimal(Double.toString(v1));
- java.math.BigDecimal b2 = new java.math.BigDecimal(Double.toString(v2));
- return b1.subtract(b2).doubleValue();
+ return convertToBigDecimal(v1).subtract(convertToBigDecimal(v2)).doubleValue();
}
public static double sub(String v1, String v2) {
- java.math.BigDecimal b1 = new java.math.BigDecimal(v1);
- java.math.BigDecimal b2 = new java.math.BigDecimal(v2);
- return b1.subtract(b2).doubleValue();
+ return convertToBigDecimal(v1).subtract(convertToBigDecimal(v2)).doubleValue();
}
/**
* 提供精确的乘法运算。
- *
- * @param v1 被乘数
- * @param v2 乘数
- * @return 两个参数的积
*/
-
public static double mul(double v1, double v2) {
- java.math.BigDecimal b1 = new java.math.BigDecimal(Double.toString(v1));
- java.math.BigDecimal b2 = new java.math.BigDecimal(Double.toString(v2));
- return b1.multiply(b2).doubleValue();
+ return convertToBigDecimal(v1).multiply(convertToBigDecimal(v2)).doubleValue();
}
public static double mul(String v1, String v2) {
- java.math.BigDecimal b1 = new java.math.BigDecimal(v1);
- java.math.BigDecimal b2 = new java.math.BigDecimal(v2);
- return b1.multiply(b2).doubleValue();
+ return convertToBigDecimal(v1).multiply(convertToBigDecimal(v2)).doubleValue();
}
/**
- * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。
- *
- * @param v1 被除数
- * @param v2 除数
- * @return 两个参数的商
+ * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到小数点以后10位,以后的数字四舍五入。
*/
-
public static double div(double v1, double v2) {
return div(v1, v2, DEF_DIV_SCALE);
}
public static double div(String v1, String v2) {
- java.math.BigDecimal b1 = new java.math.BigDecimal(v1);
- java.math.BigDecimal b2 = new java.math.BigDecimal(v2);
- return b1.divide(b2, DEF_DIV_SCALE, java.math.BigDecimal.ROUND_HALF_UP).doubleValue();
+ return div(v1, v2, DEF_DIV_SCALE);
}
/**
- * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。
- *
- * @param v1 被除数
- * @param v2 除数
- * @param scale 表示表示需要精确到小数点以后几位。
- * @return 两个参数的商
+ * 提供(相对)精确的除法运算,由scale参数指定精度。
*/
-
public static double div(double v1, double v2, int scale) {
- if (scale < 0) {
- throw new IllegalArgumentException("The scale must be a positive integer or zero");
- }
- java.math.BigDecimal b1 = new java.math.BigDecimal(Double.toString(v1));
- java.math.BigDecimal b2 = new java.math.BigDecimal(Double.toString(v2));
- return b1.divide(b2, scale, java.math.BigDecimal.ROUND_HALF_UP).doubleValue();
+ validateScale(scale);
+ return convertToBigDecimal(v1).divide(convertToBigDecimal(v2), scale, BigDecimal.ROUND_HALF_UP).doubleValue();
+ }
+
+ public static double div(String v1, String v2, int scale) {
+ validateScale(scale);
+ return convertToBigDecimal(v1).divide(convertToBigDecimal(v2), scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精确的小数位四舍五入处理。
- *
- * @param v 需要四舍五入的数字
- * @param scale 小数点后保留几位
- * @return 四舍五入后的结果
*/
-
public static double round(double v, int scale) {
- if (scale < 0) {
- throw new IllegalArgumentException("The scale must be a positive integer or zero");
- }
- java.math.BigDecimal b = new java.math.BigDecimal(Double.toString(v));
- java.math.BigDecimal one = new java.math.BigDecimal("1");
- return b.divide(one, scale, java.math.BigDecimal.ROUND_HALF_UP).doubleValue();
+ validateScale(scale);
+ return convertToBigDecimal(v).divide(convertToBigDecimal(ONE), scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static double round(String v, int scale) {
+ validateScale(scale);
+ return convertToBigDecimal(v).divide(convertToBigDecimal(ONE), scale, BigDecimal.ROUND_HALF_UP).doubleValue();
+ }
+
+ // 校验scale参数
+ private static void validateScale(int scale) {
if (scale < 0) {
- throw new IllegalArgumentException("The scale must be a positive integer or zero");
+ throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
- java.math.BigDecimal b = new java.math.BigDecimal(v);
- java.math.BigDecimal one = new java.math.BigDecimal("1");
- return b.divide(one, scale, java.math.BigDecimal.ROUND_HALF_UP).doubleValue();
}
}