Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Programadores experientes help!!

Opa boa noite, fiz uma mudança no meu sistema, campo do meu valor parcela era double, agora coloquei para bigDecimal, e eu to "travado" nessa parte uns 3 dias, oque eu quero fazer? No meu sistema está gerando parcelas, e como por exemplo aparece parcelas como por exemplo, 100 / 3, ou 200 / 3, e todas agora com o bigDecimal está gerando 33.33, quero que na ultima parcela, ele acrescenta 33.34 ao invez de 33.33, mais lembrando não quero que essa "regra de negocio" serve para todas, porque vou ter parcelas como exemplo 300 / 2 ai vai bater o resultado certo como 2 parcela de 150, ai não ira fazer sentido pegar a ultima parcela desse resultado e somar mais 1. Me ajudeem :(

7 respostas
solução!

Olá Alisson,

Veja se o exemplo abaixo resolve seu problema:

import java.math.BigDecimal;
import java.math.RoundingMode;

public class CalculoParcelas {

    public static void main(String[] args) {
        parcelar(new BigDecimal(100), 3);
        parcelar(new BigDecimal(200), 3);
        parcelar(new BigDecimal(300), 2);
    }

    public static void parcelar(BigDecimal valor, int qtdParcelas) {
        System.out.println("Valor:" + valor + " Parcelado em " + qtdParcelas + "x");

        // define a precisao para 2 e aredonda para baixo
        BigDecimal withPrecisionDown = valor.setScale(2, RoundingMode.DOWN);
        BigDecimal valorPrimeirasParcelas = withPrecisionDown.divide(new BigDecimal(qtdParcelas), RoundingMode.DOWN);

        for (int i = 1; i <= qtdParcelas; i++) {
            if (i != qtdParcelas) {
                System.out.println(valorPrimeirasParcelas);
            } else {
                // define a precisao para 2 e aredonda para cima
                BigDecimal withPrecisionUp = valor.setScale(2, RoundingMode.UP);
                BigDecimal valorUltimaParcela = withPrecisionUp.divide(new BigDecimal(qtdParcelas), RoundingMode.UP);

                System.out.println(valorUltimaParcela);
            }
        }
    }

}

Basicamente eu defino as primeiras parcelas com precisão de 2 digitos e aredondo o calculo para baixo. Porém na ultima parcela eu aredondo para cima.

Denis me ajudou muito irmao, porem agora resolvi o problema dos 100 / 3, mais quando faço 200 /3 vai sobrar um centavo também, :(

Oi Alisson,

Não entendi essa parte do 200/3, as parcelas deveriam ser:

66.66 / 66.66 / 66.67

correto? Caso contrário, qual seria o esperado?

Oi Denis primeiramente obrigado! então esse valor ai mesmo, 66.66 / 66.66 / 66.67 ira dar 199.99.

De nada, pena que ainda não funcionou 100%. Entendi o que você quer dizer, acho que dá para ajustar para chegar nesse resultado, vou tentar ajustar mais tarde, mas acredito que a solução não será muito simples.

kkkk Denis to pensando em fazer o valor da minha parcela e pegar o restante usando o % por exemplo.

200%quantidadeParcela, e os restar jogo na ultima parcela.

É valido?

Denis obrigado pela sua ajuda, consegui resolver, você deu o caminho para mim e consegui resolver, obrigado de verdade! abraço