如何使用BigDecimal添加分期付款的兴趣?

时间:2016-09-03 20:58:55

标签: java

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

    }

2 个答案:

答案 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);