1
resposta

Método Deposita com BigDecimal

Bom dia, estou com um problema no meu método deposita, ao trocar de double para BigDecimal na invocação do método não consigo alterar o valor do atributo:

Classe Conta:

import java.math.BigDecimal;

public class Conta {

    private BigDecimal saldo;
    private int agencia;
    private int numero;
    private Cliente titular;
    private static int total;

    public Conta(int agencia , int numero) {
        total++;
        this.agencia = agencia;
        this.numero = numero;
        this.saldo = new BigDecimal(0);        
    }

    public void deposita(BigDecimal valor) {
        BigDecimal deposito = valor;
        saldo.add(deposito);
    }

    public BigDecimal getSaldo() {
        return this.saldo;
    }



}

Classe App:

import java.math.BigDecimal;

public class App {

    public static void main(String[] args) {

        Cliente cliente = new Cliente();
        ContaCorrente cc = new ContaCorrente(1525,54789);
        ContaPoupanca cp = new ContaPoupanca(1478,85697);

        //Conta Corrente
        cc.deposita(new BigDecimal(1500.0));
        System.out.println("Deposito - Saldo CC: " + cc.getSaldo());


    }

}

Resultado da impressão:

Deposito - Saldo CC: 0

O que fazer nesse caso?

1 resposta

Oie Alfredo, tudo bem contigo?

Vendo seu código observei alguns problemas com o uso do "BigDecimal", o primeiro deles é que o ideal quando você for definir o valor da variável através do construtor você deve usar uma "String" e não um "double". Ao usar o "double" o valor do "BigDecimal" pode perder a precisão, por isso sempre use uma "String" ao dar input do valor pelo construtor do "BigDecimal".

Agora vamos para o código, fiz algumas alterações para ele funcionar.

Classe Conta:

import java.math.BigDecimal;

public class Conta {
    private BigDecimal saldo;
    private int agencia;
    private int numero;
    private Cliente titular;
    private static int total;

    public Conta(int agencia , int numero) {
        total++;
        this.agencia = agencia;    
        this.numero = numero;
        this.saldo = new BigDecimal("0");
    }

    public void deposita(BigDecimal valor) {

        String deposita = saldo.toString(); // salva o valor do saldo em uma variável "deposita" do tipo String pra possibilitar a soma no próximo método
        saldo = new BigDecimal(deposita).add(valor); // faz a soma do atributo "deposita" com o valor que o usuário colocou de entrada
    }

    public BigDecimal getSaldo() {
        return this.saldo;
    }
}

Classe App:

import java.math.BigDecimal;

public class App {

    public static void main(String[] args) {

            Cliente cliente = new Cliente();
            Conta cc = new Conta(1525,54789);
            Conta cp = new Conta(1478,85697);

            //Conta Corrente
            cc.deposita(new BigDecimal("1500"));
            cc.deposita(new BigDecimal("1800"));
            cc.deposita(new BigDecimal("1200"));
            System.out.println("Deposito - Saldo CC: " + cc.getSaldo());
    }

}

Achei um artigo bem legal que explica muito bem sobre o "BigDecimal", se tiver interesse, clique aqui.

Espero que eu tenha ajudado! Qualquer outra dúvida eu fico a disposição :)

Bons estudos!