2
respostas

Valor estranho ao subtrair a taxa de 20 centavos no saque na conta corrente

public class TesteContas {

    public static void main(String[] args) {

        ContaCorrente cc = new ContaCorrente(1234,121211);
        cc.deposita(1000);

        ContaPoupanca cp = new ContaPoupanca(3773,02320);
        cp.deposita(200);

        System.out.println("Valor antes conta poupanca antes: " + cp.getSaldo());
        System.out.println("Valor da conta corrente antes: " + cc.getSaldo());
        cc.transfere(100,cp);
        System.out.println("Valor da conta poupanca depois: " + cp.getSaldo());
        System.out.println("Valor da conta conrrente depois: " + cc.getSaldo());

        cc.transfere(100,cp);
        System.out.println("Novo valor da conta corrente: " + cc.getSaldo());

    }
}

Ao executar esse código executando o polimorfismo e colocando um taxa de 20 centavos por saque/transferência. A primeira vez que executo a transferência e faço o getSaldo aparece o valor correto, mas quando faço a segunda dá um valor errado... Segue o display abaixo:

.jar=51875:C:\Users\syn1985\Documents\Intellij\ideaIC-2020.1.win\bin -Dfile.encoding=UTF-8 -classpath "C:\Users\syn1985\Meus Documentos\Workspace\byteBank-composto\out\production\byteBank-herdado-banco" TesteContas

Valor antes conta poupanca antes: 200.0

Valor da conta corrente antes: 1000.0

Valor da conta poupanca depois: 300.0

Valor da conta conrrente depois: 899.8

Novo valor da conta corrente: 799.5999999999999

Process finished with exit code 0

Sabe dizer porque apareceu 799.5999999999999 ao invés de 799.60?

2 respostas

Oi Anderson, tudo bem com você?

Pode ficar tranquilo que o problema está relacionado exclusivamente à forma como o próprio Java trabalha. No caso, double nunca é uma forma muito recomendada de trabalhar quando lidamos com dinheiro ou qualquer valor que exija um grau elevado de precisão em operações.

Esse é um assunto bem comum de ser discutido para quem está iniciando em Java, então vou deixar aqui o link para um post da Caelum que introduz de maneira simples uma forma de se trabalhar com números precisos!

https://blog.caelum.com.br/arredondamento-no-java-do-double-ao-bigdecimal/

Espero ter ajudado, se ficou qualquer dúvida é só avisar!

Bons estudos!!

Muito obrigado pela resposta Thiago, ajudou bastante sim Vou testar as alternativas propostas.

Abraço