Acrescentar juros por parcela com BigDecimal ?

1 resposta Resolvido
java
F

Estou criando um sistema onde preciso calcular os juros e acrescentar as parcelas de um financiamento. Para isso, estou usando BigDecimal e não estou conseguindo realizar a operação matemática seguindo a formula de cálculos de prestação. Como fazer isso ?

Estou tentando assim.

private void calcular(){
        /**
         * formula
         * PMT = PV. i
         *          ----
         *          1 - (1 + i)^-n
         * 
         */
        BigDecimal total = new BigDecimal(0);
        BigDecimal pmt = new BigDecimal(0);
        BigDecimal valorVeiculo = ValorBigDecimal.getValor(txtParcela.getText()); 
        Integer parcela = Integer.parseInt(txtParcela.getText());
        BigDecimal entrada = valorEntrada();
        BigDecimal juros = ValorBigDecimal.getValor(txtJuros.getText()).divide(new BigDecimal(100));
        
        //valor do veiculo - valor entrada
        total = total.add(valorVeiculo).subtract(entrada);
        
        //calcula prestacao
        pmt = pmt.add(total).multiply(juros.divide(new BigDecimal(1).subtract(new BigDecimal(1).add(juros).pow(parcela))));
        pmt = pmt.setScale(2, RoundingMode.HALF_EVEN);
        System.out.println(pmt);
        
        
    }

http://i.stack.imgur.com/x8vZA.png

1 Resposta

F
Solucao aceita

Resolvido.
Segui 2 formulas para chegar ao resultado a primeira formula PMT = PV * i / 1 - (1 + i)^-n e a segunda formula PMT = PV / (1 + i)^n - 1 / (1 + i)^n * i. Com a primeira formula não consegui fazer funcionar, soh tive sucesso usando a segunda formula que ficou como abaixo.

private void calcular(){
        /**
         * formulas
         * F1 -> PMT = PV * i / 1 - (1 + i)^-n (nao funciona)       
         * F2 -> PMT = PV / (1 + i)^n - 1 / (1 + i)^n * i (funciona 100%)
         */
        BigDecimal total = new BigDecimal(0);
        BigDecimal diferenca = new BigDecimal(0);
        BigDecimal pv = ValorBigDecimal.getValor(txtValorVeiculo.getText());
        BigDecimal juros = ValorBigDecimal.getValor(txtJuros.getText()).divide(new BigDecimal(100));
        BigDecimal entrada = getValorEntrada();
        Integer parcelas = Integer.parseInt(txtParcela.getText());
        BigDecimal taxa = new BigDecimal(0);
        BigDecimal t1 = new BigDecimal(0);
        BigDecimal t2 = new BigDecimal(0);

        //calcula diferenca entre valor do veiculo e a entrada        
        diferenca = diferenca.add(pv).subtract(entrada);
        //(1 + i)^n - 1 
        t1 = BigDecimal.ONE.add(juros).pow(parcelas).subtract(BigDecimal.ONE);
        //(1 + i)^n * i
        t2 = BigDecimal.ONE.add(juros).pow(parcelas).multiply(juros);
        //(1 + i)^n - 1 / (1 + i)^n * i -> t1 / t2
        taxa = t1.divide(t2, 2, RoundingMode.HALF_UP);
        total = diferenca.divide(taxa, 2, RoundingMode.HALF_UP);

        System.out.println(t1);
        System.out.println(t2);
        System.out.println(taxa);
        System.out.println(total);        

    }
Criado 3 de setembro de 2016
Ultima resposta 4 de set. de 2016
Respostas 1
Participantes 1