Problema com soma

3 respostas
M

Fala pessoal tudo bem? Estou com um probleminha aqui bem básico mesmo, mas não sei o que tá acontecendo.. Vou postar o código e se alguém puder me explicar:

public class NewClass {
    
    public static void main (String[] args){
    double teste = 5/2;
    System.out.print(teste);
    }
}

Ele tá imprimindo 2 na tela, e não 2.5 como deveria ser o resultado.. Porém se coloco:

public class NewClass {
    
    public static void main (String[] args){
    double teste = 5;
    teste /= 2;
    System.out.print(teste);
    }
}

Ele dá o resultado correto.. O que tá acontecendo ?

3 Respostas

leandronsp

No primeiro caso, você está fazendo divisão de dois inteiros e jogando num double. Porém a precisão foi perdida no momento da operação, pois era com inteiros e não havia nenhum númro com ponto flutuante pra quebrar a divisão.

No segundo caso, o que está acontecendo é:

teste = teste / 2;

onde teste (dividendo) é double. O resultado então foi calculado com a precisão do double.
Se você trocar e deixar o divisor como double e o dividendo como inteiro, a precisão também será mantida, pois a divisão será quebrada pelo ponto flutuante definido em uma das variáveis.

ViniGodoy

Uma forma de corrigir a linha no primeiro exemplo, é usando literais double:

double teste = 5.0 / 2.0;
fernandopaiva

Só uma dica, para valores use BigDecimal e nao Double.

veja.

BigDecimal dividendo = new BigDecimal(5);
System.out.println(dividendo.divide(new BigDecimal(2)));

//ou

BigDecimal dividendo = new BigDecimal(5);
BigDecimal divisor = new BigDecimal(2);
System.out.println(dividendo.divide(divisor));

Fica a dica. Para valores R$, use sempre BigDecimal.

t+ e boa sorte

Criado 25 de fevereiro de 2012
Ultima resposta 26 de fev. de 2012
Respostas 3
Participantes 4