我正在创建一个销售汽车的应用程序,该应用程序可以选择每月分期付款购买汽车。现在,我想增加分期付款的兴趣。我正在使用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())
));