我正在创建一个销售汽车的应用程序,该应用程序可以选择每月分期付款购买汽车。现在,我想增加分期付款的兴趣。我正在使用BigDecimal做到这一点,并解决了取整值问题,但问题是我无法使用BigDecimal做到这一点。我如何使用BigDecimal做到这一点?

在寻找方法时,我发现了一个要计算的配方,配方是:
PMV = PV * i / 1-(1 + i)^-n;。但是我不能使用BigDecimal做到这一点。


PMV =分期付款,PV =汽车价值,i =利息,n =分期付款数量


我尝试着。

private void calculate(){
        /**
         * recipe
         * PMT = PV * i / 1 - (1 + i)^-n
         */
        BigDecimal total = new BigDecimal(0);
        BigDecimal pmt = new BigDecimal(0);
        BigDecimal finalValue = new BigDecimal(0);

        BigDecimal pv = ValorBigDecimal.getValor(txtParcela.getText());
        Integer installments = Integer.parseInt(txtParcela.getText());
        BigDecimal inputValue = valorEntrada();
        BigDecimal interest = ValorBigDecimal.getValor(txtJuros.getText()).divide(new BigDecimal(100));
        BigDecimal rate = interest;

        //carValue - inputValue, check if financing has input value to subtract of car value
        total = total.add(pv).subtract(inputValue);

        //calculate
        finalValue = finalValue.add(total);
        rate = rate.divide(new BigDecimal(1).subtract(new BigDecimal(1).add(interest)).pow(installments));
        finalValue = finalValue.multiply(rate);

        System.out.println(finalValue);

    }

最佳答案

问题出在rate计算中。您将pow()应用于1-(1+i),而不是(1+i)。您还需要否定installments。因此,必须有:

rate = rate.divide(BigDecimal.ONE.subtract(
           BigDecimal.ONE.add(interest).pow(installments.negate())
       ));

07-24 22:10