如何计算没有整数bigdecimal指数的功率?

时间:2012-11-19 17:00:45

标签: java bigdecimal

尝试计算(a + b)^ n,其中n是BigDecimal变量中的实数值,但BigDecimal.pow设计为仅接受整数值。

2 个答案:

答案 0 :(得分:1)

如果输入在double支持的幅度范围内,并且结果中不需要超过15位有效数字,请将(a + b)和n转换为double,使用Math.pow,并将结果转换回来到BigDecimal。

答案 1 :(得分:1)

只要您只使用指数的整数,就可以使用一个简单的循环来计算x ^ y:

public static BigDecimal pow(BigDecimal x, BigInteger y) {
    if(y.compareTo(BigInteger.ZERO)==0) return BigDecimal.valueOf(1); //If the exponent is 0 then return 1 because x^0=1
    BigDecimal out = x;
    BigInteger i = BigInteger.valueOf(1);
    while(i.compareTo(y.abs())<0) {                                   //for(BigDecimal i = 1; i<y.abs(); i++) but in BigDecimal form
        out = out.multiply(x);
        i = i.add(BigInteger.ONE);
    }
    if(y.compareTo(BigInteger.ZERO)>0) {
        return out;
    } else if(y.compareTo(BigInteger.ZERO))<0) {
        return BigDecimal.ONE.divide(out, MathContext.DECIMAL128);    //Just so that it doesn't throw an error of non-terminating decimal expansion (ie. 1.333333333...)
    } else return null;                                               //In case something goes wrong
}

或BigDecimal x和y:

public static BigDecimal powD(BigDecimal x, BigDecimal y) {
    return pow(x, y.toBigInteger());
}

希望这有帮助!