diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberUtil.java index a756290ca..f9679eb75 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberUtil.java @@ -944,19 +944,15 @@ public class NumberUtil extends NumberValidator { return BigDecimal.ZERO; } - try { - // 支持类似于 1,234.55 格式的数字 - final Number number = parseNumber(numberStr); - if (number instanceof BigDecimal) { - return (BigDecimal) number; - } else { - return new BigDecimal(number.toString()); - } - } catch (final Exception ignore) { + // issue#3241,优先调用构造解析 + try{ + return new BigDecimal(numberStr); + } catch (final Exception ignore){ // 忽略解析错误 } - return new BigDecimal(numberStr); + // 支持类似于 1,234.55 格式的数字 + return toBigDecimal(parseNumber(numberStr)); } /** 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 8d09d53b8..2559571b1 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 @@ -375,6 +375,9 @@ public class NumberUtilTest { bigDecimal = NumberUtil.toBigDecimal("1,234.56D"); Assertions.assertEquals("1234.56", bigDecimal.toString()); + + // issue#3241 + Assertions.assertEquals(new BigDecimal("9.0E+7"), NumberUtil.toBigDecimal("9.0E+7")); } @Test