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

Dúvida no Ex. 4 da Aula 1 - Herança, reescrita e polimorfismo

Eu fiz de uma maneira diferente que não deu certo. observe o código abaixo o método "atualiza" da classe conta.

    public void atualiza(int taxa){        

        if(taxa <= 100 && taxa >= 0){
            this.saldo += this.saldo * (taxa /100);
        }else{
            System.out.println("Percentual deve estar entre 0 e 100 !");
        }
    }

o meu atributo "taxa" é do tipo primitivo int e não double. Eu achei que dividindo a taxa por 100 eu teria um valor decimal. por Exemplo se eu dividir 1 por 100 o resultado é 0.01, mas o mesmo retornou somente a parte inteira que é 0 "zero". Alguém sabe como eu resolvo isso ?

7 respostas

Apenas mude o tipo primitivo:

public void atualiza(double taxa)

Esqueci de explicar o pq .. haha

Teste esse seu método utilizando o "int". Passa qualquer taxa entre 0 e 99, assim que ele fizer (taxa / 100), o valor ficara quebrado, ou seja, "double" ...

Agora passe 100 como a taxa e você vera que seu método funciona pois 100/100 = 1, ou seja, é aceito pelo int por ser um valor inteiro !!!

Para evitar casos como esse, se faz o uso do "double", entendeu ???

PS: sou péssimo para explicar :D

Eu entendi.... Mas será que não existe algo mais flexível ? Pois eu posso ter um código muito antigo onde eu não possa mexer.... Eu acredito que eu possa dividir 1 por 100 e guardar este resultado de dois valores INT em double.

solução!

Jefferson,

Uma divisão de inteiros sempre retorna um número inteiro por isso que apareceu zero no seu resultado. O ideal é usar double mesmo quando você precisar de valores decimais mas, se você realmente quiser mantê-los como int, o jeito é fazer um cast de um dos termos para double. Exemplo:

this.saldo += this.saldo * ((double)taxa /100);

Abraço!

Jefferson, outra forma muito sim: se você quer que o retorno da divisão seja um double, basta colocar um d após o 100: (1/100d).

Isto quer dizer que você está considerando que o 100 é um double, e não um int. Para floats, coloque um f.

Mas como bem disseram, o melhor neste caso é trabalhar com doubles ou floats como tipo primitivo.

Legal... Galera... vc não são (1/100), mas (100/1)... Abraço a todos...

Se tiver entendido fecha a dúvida pra gente