From 12547f4d4c9192369f712a38f77c8263e16d7108 Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 12 Jan 2026 16:08:17 +0800 Subject: [PATCH] =?UTF-8?q?`NumberUtil.parseNumber`=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=A7=91=E5=AD=A6=E8=AE=A1=E6=95=B0=E6=B3=95?= =?UTF-8?q?=EF=BC=88pr#4211@Github=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 ++- .../main/java/cn/hutool/core/util/NumberUtil.java | 2 +- .../java/cn/hutool/core/util/NumberUtilTest.java | 15 +++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 83d92d8211..392ebecbea 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,9 @@ # 🚀Changelog ------------------------------------------------------------------------------------------------------------- -# 5.8.44 +# 5.8.44(2026-01-12) ### 🐣新特性 +* 【core 】 `NumberUtil.parseNumber`增加支持科学计数法(pr#4211@Github) ### 🐞Bug修复 * 【json 】 修复`JSONUtil.wrap`忽略错误问题(issue#4210@Github) 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 0ba07f3f74..2a45ad14d6 100755 --- a/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/NumberUtil.java @@ -2785,7 +2785,7 @@ public class NumberUtil { // issue#IDJ1NS@Gitee 处理科学计数法E+格式 // NumberFormat对E+格式支持不佳,使用BigDecimal直接解析 - if (numberStr.contains("E") || numberStr.contains("e")) { + if (StrUtil.containsIgnoreCase(numberStr, "e")) { try { return new BigDecimal(numberStr); } catch (NumberFormatException e) { 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 49ea24aaef..2173d1b908 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 @@ -389,14 +389,13 @@ public class NumberUtilTest { } @Test - public void parseNumberTest5() { - String numberstr1 = "8.37095942E+9"; - Number result1 = NumberUtil.parseNumber(numberstr1); - // 转换成BigDecimal再输出完整数字 - System.out.println(((BigDecimal) result1).toPlainString()); - String numberstr2 = "8.37095942e+9"; - Number result2 = NumberUtil.parseNumber(numberstr2); - System.out.println(((BigDecimal) result2).toPlainString()); + void issueIDJ1NSTest(){ + final String numberstr1 = "8.37095942E+9"; + final BigDecimal result1 = (BigDecimal) NumberUtil.parseNumber(numberstr1); + final String numberstr2 = "8.37095942e+9"; + final BigDecimal result2 = (BigDecimal) NumberUtil.parseNumber(numberstr2); + assertEquals(new BigDecimal("8370959420").toPlainString(), result1.toPlainString()); + assertEquals(new BigDecimal("8370959420").toPlainString(), result2.toPlainString()); } @Test