diff --git a/hutool-core/src/main/java/cn/hutool/core/math/NumberUtil.java b/hutool-core/src/main/java/cn/hutool/core/math/NumberUtil.java index a75d304c1..2f34ca240 100644 --- a/hutool-core/src/main/java/cn/hutool/core/math/NumberUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/math/NumberUtil.java @@ -12,10 +12,10 @@ package cn.hutool.core.math; +import cn.hutool.core.array.ArrayUtil; import cn.hutool.core.comparator.CompareUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.text.StrUtil; -import cn.hutool.core.array.ArrayUtil; import cn.hutool.core.util.CharUtil; import java.math.BigDecimal; @@ -25,6 +25,7 @@ import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.ParseException; import java.util.Collection; +import java.util.Objects; /** * 数字工具类
@@ -56,6 +57,7 @@ public class NumberUtil { private static final int DEFAULT_DIV_SCALE = 10; // region ----- add + /** * 提供精确的加法运算
* 如果传入多个值为null或者空,则返回0 @@ -106,6 +108,7 @@ public class NumberUtil { // endregion // region ----- sub + /** * 提供精确的减法运算
* 如果传入多个值为null或者空,则返回0 @@ -156,6 +159,7 @@ public class NumberUtil { // endregion // region ----- mul + /** * 提供精确的乘法运算
* 如果传入多个值为null或者空,则返回0 @@ -201,6 +205,7 @@ public class NumberUtil { // endregion // region ----- div + /** * 提供(相对)精确的除法运算,当发生除不尽的情况的时候,精确到小数点后10位,后面的四舍五入 * @@ -1011,6 +1016,7 @@ public class NumberUtil { } // region ----- equals + /** * 比较大小,值相等 返回true
* 此方法通过调用{@link Double#doubleToLongBits(double)}方法来判断是否相等
@@ -1053,17 +1059,28 @@ public class NumberUtil { } /** - * 比较大小,值相等 返回true
- * 此方法通过调用{@link BigDecimal#compareTo(BigDecimal)}方法来判断是否相等
+ * 比较数字值是否相等,相等返回{@code true}
+ * 需要注意的是{@link BigDecimal}需要特殊处理
+ * BigDecimal使用compareTo方式判断,因为使用equals方法也判断小数位数,如2.0和2.00就不相等,
* 此方法判断值相等时忽略精度的,即0.00 == 0 * - * @param bigNum1 数字1 - * @param bigNum2 数字2 + * + * + * @param number1 数字1 + * @param number2 数字2 * @return 是否相等 * @see CompareUtil#equals(Comparable, Comparable) + * @see Objects#equals(Object, Object) */ - public static boolean equals(final BigDecimal bigNum1, final BigDecimal bigNum2) { - return CompareUtil.equals(bigNum1, bigNum2); + public static boolean equals(final Number number1, final Number number2) { + if (number1 instanceof BigDecimal && number2 instanceof BigDecimal) { + // BigDecimal使用compareTo方式判断,因为使用equals方法也判断小数位数,如2.0和2.00就不相等 + return CompareUtil.equals((BigDecimal) number1, (BigDecimal) number2); + } + return Objects.equals(number1, number2); } /** @@ -1082,6 +1099,7 @@ public class NumberUtil { // endregion // region ----- toStr + /** * 数字转字符串
* 调用{@link Number#toString()},并去除尾小数点儿后多余的0 @@ -1428,6 +1446,7 @@ public class NumberUtil { } // region ----- parse + /** * 解析转换数字字符串为 {@link java.lang.Integer } 规则如下: * diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java index 02ea86dc1..9916cede0 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java @@ -54,8 +54,8 @@ public class ObjUtil { * @since 5.4.3 */ public static boolean equals(final Object obj1, final Object obj2) { - if (obj1 instanceof BigDecimal && obj2 instanceof BigDecimal) { - return NumberUtil.equals((BigDecimal) obj1, (BigDecimal) obj2); + if (obj1 instanceof Number && obj2 instanceof Number) { + return NumberUtil.equals((Number) obj1, (Number) obj2); } else if(ArrayUtil.isArray(obj1) && ArrayUtil.isArray(obj2)){ return ArrayUtil.equals(obj1, obj2); }