Erro de Operação

public class Estudo {

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

}

}

no código a cima, a saída teria que se 2.5, porque 5 dividido por 2 é 2,5.
só que aqui no meu pc a saída é somente 2.0, se eu coloco o valor 2,5 ele sai corretamente agora nessa operação ele só retorna 2.0, alguém sabe o porquê?

A divisão de dois inteiros, em java, retorna um inteiro. Se colocares 5.0 ou 2.0 já vai retornar o 2.5 que pretendes.

2 curtidas

Como o pmlm explicou é porque está dividindo dois inteiros, 5.0 ou 2.0 bastam para ser tratado como número real. Outra opção é você fazer double teste = (double) 5 / (double) 2, pois se você estivesse tratando de duas variáveis inteiras você não conseguiria inserir a casa decimal como em teste = (double) int1 / (double) int2. Recomendo dar uma lida sobre casting pois há outros problemas relacionados, como polimorfismo e herança, que podem usufruir disso.

Opa vlw ae gente, sabia disso não
Obrigado

O que determina o tipo de resultado é o tipo do divisor, não do dividendo.
5.0 / 2 vai retornar 2.0.
5 / 2.0 vai retornar 2.5

Seria em versões de JVM anteriores a 9?

jshell

Até o 8 era assim.
Não conheço esse JShell, vou dar uma olhada, talvez é ele quem trate o resultado.

Está embutido no java 9 e bem parecido com o interpretador do python (que manda lembranças :joy:)

Pode ser e confesso que nem criei classe para testar, mas para testes simples é uma mão na roda!

Não era não. Desde que um deles seja double, o resultado é double. Acebei de confirmar quer em java 6 quer em java 8, este código

public static void main(String[] args) {
    System.out.println(5.0/2);
    System.out.println(5/2.0);
}

imprime

2.5
2.5

Era sim, já tive um bug em produção devido à isso.
Então era em versão mais antiga, talvez no 1.4 ou 1.5.