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");