From 73c77aaecee6b367f8f5080fdd245c80c8e00265 Mon Sep 17 00:00:00 2001 From: lpj <971567977@qq.com> Date: Mon, 1 Sep 2025 18:52:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3#4051=E6=8F=90=E5=87=BA?= =?UTF-8?q?=E7=9A=84=E6=84=8F=E8=A7=81,=E5=A2=9E=E5=8A=A0=E8=B4=9F?= =?UTF-8?q?=E6=8C=87=E6=95=B0=E8=87=AA=E5=AE=9A=E4=B9=89=E4=BF=9D=E7=95=99?= =?UTF-8?q?=E4=BD=8D=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/util/NumberUtil.java | 20 +++++++++++++++++-- .../cn/hutool/core/util/NumberUtilTest.java | 8 ++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) 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 476535ba3..f5cbe0256 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 @@ -2549,7 +2549,7 @@ public class NumberUtil { /** * 提供精确的幂运算
- * 如果n为负数,则返回1/a的-n次方,默认四舍五入 + * 如果n为负数,则返回1/a的-n次方,默认四舍五入,保留两位小数 * * @param number 底数 * @param n 指数,如果为负数,则返回1/a的-n次方 @@ -2557,9 +2557,25 @@ public class NumberUtil { * @since 4.1.0 */ public static BigDecimal pow(BigDecimal number, int n) { + return pow(number, n, 2, RoundingMode.HALF_UP); + } + + + /** + * 提供精确的幂运算
+ * 如果n为负数,则返回1/a的-n次方,默认四舍五入 + * + * @param number 底数 + * @param n 指数,如果为负数,则返回1/a的-n次方 + * @param scale 保留的小数位 (指数为负数时生效) + * @param roundingMode 保留小数的模式 {@link RoundingMode} (指数为负数时生效) + * @return 幂的积 + * @since 4.1.0 + */ + public static BigDecimal pow(BigDecimal number, int n, int scale, RoundingMode roundingMode) { if (n < 0) { // a的n次方,如果n为负数,则返回1/a的-n次方 - return BigDecimal.ONE.divide(pow(number, -n), 2, RoundingMode.HALF_UP); + return BigDecimal.ONE.divide(pow(number, -n), scale, roundingMode); } return number.pow(n); } 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 145ad5bb6..528da7adf 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 @@ -660,6 +660,14 @@ public class NumberUtilTest { assertEquals(expected, NumberUtil.pow(number, exponent)); } + @Test + public void testPowSmallNumberScale() { + BigDecimal number = new BigDecimal("1.2"); + int exponent = -3; + BigDecimal expected = new BigDecimal("0.58"); + assertEquals(expected, NumberUtil.pow(number, exponent)); + } + @Test public void issue3636Test() { final Number number = NumberUtil.parseNumber("12,234,456");