我正在创建销售汽车的应用程序,该应用程序可以选择每月分期购买汽车。现在,我想增加对分期付款的兴趣。我正在使用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);
}
答案 0 :(得分:1)
问题出在rate
计算中。您将pow()
应用于1-(1+i)
,而不是(1+i)
。你还需要否定installments
。所以,必须有:
rate = rate.divide(BigDecimal.ONE.subtract(
BigDecimal.ONE.add(interest).pow(installments.negate())
));
答案 1 :(得分:0)
我很难分辨出发生了什么。您可以从输入与实际计算部分分开开始。根据您的公式PMT = PV * i / 1 - (1 + i)^-n
,您可以定义如下方法:
public BigDecimal computeIt(double pv, double i, int n) {
BigDecimal bigPv = new BigDecimal(pv);
BigDecimal bigI = new BigDecimal(i);
BigDecimal leftStuff = bigPv.multiply(bigI).divide(BigDecimal.ONE);
BigDecimal rightStuff = bigI.add(BigDecimal.ONE).divide(BigDecimal.ONE).pow(n);
BigDecimal result = leftStuff.subtract(rightStuff);
return result;
}
然后您可以简单地调用方法,为其提供正确的输入并获取结果:
// Input
double pv = ...;
double i = ...
int n = ...
// Compute the result
BigDecimal result = computeIt(pv, i, n);