mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-12-07 01:28:34 +08:00
commit
643b65ee5b
@ -2549,7 +2549,7 @@ public class NumberUtil {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 提供精确的幂运算<br>
|
* 提供精确的幂运算<br>
|
||||||
* 如果n为负数,则返回1/a的-n次方,默认四舍五入
|
* 如果n为负数,则返回1/a的-n次方,默认四舍五入,保留两位小数
|
||||||
*
|
*
|
||||||
* @param number 底数
|
* @param number 底数
|
||||||
* @param n 指数,如果为负数,则返回1/a的-n次方
|
* @param n 指数,如果为负数,则返回1/a的-n次方
|
||||||
@ -2557,9 +2557,25 @@ public class NumberUtil {
|
|||||||
* @since 4.1.0
|
* @since 4.1.0
|
||||||
*/
|
*/
|
||||||
public static BigDecimal pow(BigDecimal number, int n) {
|
public static BigDecimal pow(BigDecimal number, int n) {
|
||||||
|
return pow(number, n, 2, RoundingMode.HALF_UP);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 提供精确的幂运算<br>
|
||||||
|
* 如果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) {
|
if (n < 0) {
|
||||||
// a的n次方,如果n为负数,则返回1/a的-n次方
|
// 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);
|
return number.pow(n);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -660,6 +660,14 @@ public class NumberUtilTest {
|
|||||||
assertEquals(expected, NumberUtil.pow(number, exponent));
|
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
|
@Test
|
||||||
public void issue3636Test() {
|
public void issue3636Test() {
|
||||||
final Number number = NumberUtil.parseNumber("12,234,456");
|
final Number number = NumberUtil.parseNumber("12,234,456");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user