From ead980e2469ab23382651a35951c42076d7b9533 Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 12 Sep 2023 17:54:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D16=E8=BF=9B=E5=88=B6=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/hutool/core/math/NumberParser.java | 10 +++++----- .../org/dromara/hutool/core/util/NumberUtilTest.java | 3 +++ 2 files changed, 8 insertions(+), 5 deletions(-) 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);