From c12b87f8b7383f7dce85aa80dc5b8fe39fab18d8 Mon Sep 17 00:00:00 2001 From: Shinomiya-s Date: Mon, 12 Jan 2026 14:14:09 +0800 Subject: [PATCH] fix: correct NumberUtil.parseNumber scientific notation parsing, add parseNumberTest5 --- .../src/main/java/cn/hutool/core/util/NumberUtil.java | 10 ++++++++++ .../test/java/cn/hutool/core/util/NumberUtilTest.java | 11 +++++++++++ 2 files changed, 21 insertions(+) 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 8c345ec0e6..0ba07f3f74 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 @@ -2783,6 +2783,16 @@ public class NumberUtil { // issue@4197@Github 转为半角 numberStr = Convert.toDBC(numberStr); + // issue#IDJ1NS@Gitee 处理科学计数法E+格式 + // NumberFormat对E+格式支持不佳,使用BigDecimal直接解析 + if (numberStr.contains("E") || numberStr.contains("e")) { + try { + return new BigDecimal(numberStr); + } catch (NumberFormatException e) { + // BigDecimal解析失败,继续使用NumberFormat尝试 + } + } + try { final NumberFormat format = NumberFormat.getInstance(); if (format instanceof DecimalFormat) { 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 8205e574fa..49ea24aaef 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 @@ -388,6 +388,17 @@ 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()); + } + @Test public void parseHexNumberTest() { // 千位分隔符去掉