diff --git a/CHANGELOG.md b/CHANGELOG.md
index 575659669..a625f9794 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@
* 【http 】 HttpRequest增加setProxy重载(pr#190@Gitee)
* 【core 】 XmlUtil.cleanComment(pr#191@Gitee)
* 【core 】 ArrayUtil.unWrap增加默认值(pr#1149@Github)
+* 【core 】 ArrayUtil.indexOf修改double的equals判断(pr#1147@Github)
### Bug修复
* 【core 】 解决农历判断节日未判断大小月导致的问题(issue#I1XHSF@Gitee)
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java
index 7157c0264..c09dd1b87 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java
@@ -1613,7 +1613,7 @@ public class ArrayUtil {
public static int indexOf(double[] array, double value) {
if (null != array) {
for (int i = 0; i < array.length; i++) {
- if (value == array[i]) {
+ if (NumberUtil.equals(value, array[i])) {
return i;
}
}
@@ -1632,7 +1632,7 @@ public class ArrayUtil {
public static int lastIndexOf(double[] array, double value) {
if (null != array) {
for (int i = array.length - 1; i >= 0; i--) {
- if (value == array[i]) {
+ if (NumberUtil.equals(value, array[i])) {
return i;
}
}
@@ -1663,7 +1663,7 @@ public class ArrayUtil {
public static int indexOf(float[] array, float value) {
if (null != array) {
for (int i = 0; i < array.length; i++) {
- if (value == array[i]) {
+ if (NumberUtil.equals(value, array[i])) {
return i;
}
}
@@ -1682,7 +1682,7 @@ public class ArrayUtil {
public static int lastIndexOf(float[] array, float value) {
if (null != array) {
for (int i = array.length - 1; i >= 0; i--) {
- if (value == array[i]) {
+ if (NumberUtil.equals(value, array[i])) {
return i;
}
}
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java
index bb5e7af11..8465c0f29 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java
@@ -1712,7 +1712,7 @@ public class NumberUtil {
/**
* 比较大小,值相等 返回true
- * 此方法通过调用{@link BigDecimal#compareTo(BigDecimal)}方法来判断是否相等
+ * 此方法通过调用{@link Double#doubleToLongBits(double)}方法来判断是否相等
* 此方法判断值相等时忽略精度的,即0.00 == 0
*
* @param num1 数字1
@@ -1721,7 +1721,21 @@ public class NumberUtil {
* @since 5.4.2
*/
public static boolean equals(double num1, double num2) {
- return equals(toBigDecimal(num1), toBigDecimal(num2));
+ return Double.doubleToLongBits(num1) == Double.doubleToLongBits(num2);
+ }
+
+ /**
+ * 比较大小,值相等 返回true
+ * 此方法通过调用{@link Double#doubleToLongBits(double)}方法来判断是否相等
+ * 此方法判断值相等时忽略精度的,即0.00 == 0
+ *
+ * @param num1 数字1
+ * @param num2 数字2
+ * @return 是否相等
+ * @since 5.4.5
+ */
+ public static boolean equals(float num1, float num2) {
+ return Float.floatToIntBits(num1) == Float.floatToIntBits(num2);
}
/**
diff --git a/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java
index dd1710807..d0de97034 100644
--- a/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/util/NumberUtilTest.java
@@ -263,10 +263,10 @@ public class NumberUtilTest {
@Test
public void isPowerOfTwoTest() {
- Assert.assertEquals(false, NumberUtil.isPowerOfTwo(-1));
- Assert.assertEquals(true, NumberUtil.isPowerOfTwo(16));
- Assert.assertEquals(true, NumberUtil.isPowerOfTwo(65536));
- Assert.assertEquals(true, NumberUtil.isPowerOfTwo(1));
- Assert.assertEquals(false, NumberUtil.isPowerOfTwo(17));
+ Assert.assertFalse(NumberUtil.isPowerOfTwo(-1));
+ Assert.assertTrue(NumberUtil.isPowerOfTwo(16));
+ Assert.assertTrue(NumberUtil.isPowerOfTwo(65536));
+ Assert.assertTrue(NumberUtil.isPowerOfTwo(1));
+ Assert.assertFalse(NumberUtil.isPowerOfTwo(17));
}
}