ソースを参照

fix double equals

Looly 5 年 前
コミット
4d7b795505

+ 1 - 0
CHANGELOG.md

@@ -23,6 +23,7 @@
 * 【poi   】     修复ExcelFileUtil.isXls判断问题(pr#1055@Github)
 * 【poi   】     修复CglibUtil.copyList参数错误导致的问题
 * 【http  】     修复GET请求附带body导致变POST的问题
+* 【core  】     修复double相等判断问题(pr#175@Gitee)
 
 -------------------------------------------------------------------------------------------------------------
 

+ 1 - 4
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) {

+ 14 - 0
hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java

@@ -1693,6 +1693,20 @@ public class NumberUtil {
 	 * 此方法通过调用{@link BigDecimal#compareTo(BigDecimal)}方法来判断是否相等<br>
 	 * 此方法判断值相等时忽略精度的,即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<br>
+	 * 此方法通过调用{@link BigDecimal#compareTo(BigDecimal)}方法来判断是否相等<br>
+	 * 此方法判断值相等时忽略精度的,即0.00 == 0
+	 *
 	 * @param bigNum1 数字1
 	 * @param bigNum2 数字2
 	 * @return 是否相等