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

Valores Exibidos

Olá pessoal!

Estava fazendo um exercício do curso de Java. Era pedido para eu criar um novo objeto. Não tive dúvidas quanto ao exercício em si, mas resolvi testar se o que eu havia feito estava certo e acabei me deparando com uma questão intrigante.

class Funcionario {
    String nome;
    String departamento;
    String dataDeEntrada;
    double salario;
    int rg;

    void recebeAumento(double aumento) {
        this.salario += aumento;
    }

    double calculaGanhoAnual() {
        return this.salario * 12;
    }
}

class Programa {
    public static void main(String[] args) {
        Funcionario heloisa = new Funcionario();
        heloisa.salario = 1999.9; 

        System.out.println(heloisa.salario);
        System.out.println(heloisa.calculaGanhoAnual());

        heloisa.recebeAumento(150.0);
        System.out.println(heloisa.calculaGanhoAnual());
    }
}

Ao executar o Programa.class, é exibido o seguinte:

1999.9
23998.800000000003
25798.800000000003

De fato, os resultados estão aproximadamente corretos, mas não compreendo porque, ao invés de ser exibido 23999.8 e 25798.8 está sendo exibido 23998.800000000003 e 25798.800000000003. De onde veio esse "3"?

2 respostas
solução!

É porque quando fazemos contas com double ou float é dificil determinar a precisão ou o valor exato. Para reduzir o número de casas decimais utilizamos o DecimalFormat , porém com isso iremos reduzir a precisão do dado, e ter erros de cálculo se você for, por exemplo, somar vários números. Para calculos utilizando casas decimais dê uma olhada na classe "BigDecimal", creio que isso pode te ajudar.

Certo! Muito obrigado pela explicação! Irei pesquisar sobre a classe BigDecimal.