diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberParser.java b/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberParser.java index ceb180af8..9038c4685 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberParser.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberParser.java @@ -106,16 +106,16 @@ public class NumberParser { return 0; } - if (StrUtil.containsIgnoreCase(numberStr, "E")) { - // 科学计数法忽略支持,科学计数法一般用于表示非常小和非常大的数字,这类数字转换为int后精度丢失,没有意义。 - throw new NumberFormatException(StrUtil.format("Unsupported int format: [{}]", numberStr)); - } - if (StrUtil.startWithIgnoreCase(numberStr, "0x")) { // 0x04表示16进制数 return Integer.parseInt(numberStr.substring(2), 16); } + if (StrUtil.containsIgnoreCase(numberStr, "E")) { + // 科学计数法忽略支持,科学计数法一般用于表示非常小和非常大的数字,这类数字转换为int后精度丢失,没有意义。 + throw new NumberFormatException(StrUtil.format("Unsupported int format: [{}]", numberStr)); + } + try { return Integer.parseInt(numberStr); } catch (final NumberFormatException e) { diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/util/NumberUtilTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/util/NumberUtilTest.java index 289c071f2..ef6b26418 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/util/NumberUtilTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/util/NumberUtilTest.java @@ -393,6 +393,9 @@ public class NumberUtilTest { int number = NumberUtil.parseInt("0xFF"); Assertions.assertEquals(255, number); + number = NumberUtil.parseInt("0xFE"); + Assertions.assertEquals(254, number); + // 0开头 number = NumberUtil.parseInt("010"); Assertions.assertEquals(10, number);