From 4d7b795505056f7a62199be3f14aea2b97d05887 Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 8 Sep 2020 09:46:14 +0800 Subject: [PATCH] fix double equals --- CHANGELOG.md | 1 + .../src/main/java/cn/hutool/core/img/Img.java | 5 +---- .../main/java/cn/hutool/core/util/NumberUtil.java | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc43bb035..4ea97adad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ * 【poi 】 修复ExcelFileUtil.isXls判断问题(pr#1055@Github) * 【poi 】 修复CglibUtil.copyList参数错误导致的问题 * 【http 】 修复GET请求附带body导致变POST的问题 +* 【core 】 修复double相等判断问题(pr#175@Gitee) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/img/Img.java b/hutool-core/src/main/java/cn/hutool/core/img/Img.java index c2d4fb67c..e16dcf790 100644 --- a/hutool-core/src/main/java/cn/hutool/core/img/Img.java +++ b/hutool-core/src/main/java/cn/hutool/core/img/Img.java @@ -37,7 +37,6 @@ import java.io.File; import java.io.InputStream; import java.io.OutputStream; import java.io.Serializable; -import java.math.BigDecimal; import java.net.URL; import java.nio.file.Path; @@ -304,9 +303,7 @@ public class Img implements Serializable { double widthRatio = NumberUtil.div(width, srcWidth); // 浮点数之间的等值判断,基本数据类型不能用==比较,包装数据类型不能用equals来判断。 - BigDecimal heightRatioBigDecimal = new BigDecimal(heightRatio); - BigDecimal widthRatioBigDecimal = new BigDecimal(widthRatio); - if (heightRatioBigDecimal.compareTo(widthRatioBigDecimal) == 0) { + if (NumberUtil.equals(heightRatio, widthRatio)) { // 长宽都按照相同比例缩放时,返回缩放后的图片 scale(width, height); } else if (widthRatio < heightRatio) { 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 01fefa015..3de02fa59 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 @@ -1688,6 +1688,20 @@ public class NumberUtil { return bigNum1.compareTo(bigNum2) <= 0; } + /** + * 比较大小,值相等 返回true
+ * 此方法通过调用{@link BigDecimal#compareTo(BigDecimal)}方法来判断是否相等
+ * 此方法判断值相等时忽略精度的,即0.00 == 0 + * + * @param num1 数字1 + * @param num2 数字2 + * @return 是否相等 + * @since 5.4.2 + */ + public static boolean equals(double num1, double num2) { + return equals(toBigDecimal(num1), toBigDecimal(num2)); + } + /** * 比较大小,值相等 返回true
* 此方法通过调用{@link BigDecimal#compareTo(BigDecimal)}方法来判断是否相等