From c59acb3bac8584a8884377f1a62bfd78a0fffd9d Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 9 Oct 2020 16:30:19 +0800 Subject: [PATCH] fix equals --- CHANGELOG.md | 1 + .../java/cn/hutool/core/util/ArrayUtil.java | 8 ++++---- .../java/cn/hutool/core/util/NumberUtil.java | 18 ++++++++++++++++-- .../cn/hutool/core/util/NumberUtilTest.java | 10 +++++----- 4 files changed, 26 insertions(+), 11 deletions(-) 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)); } }