int / double

int / double

by Bruno Pereira De Fazio -
Number of replies: 3
Olá.

no código abaixo:

class Média
{
double calculaMédia(int n)
{
if (n>0)
{
final double g = n;
int t = n-1;
System.out.println (+g);

while (t > 0)
{
n= n+t;
t=t-1;
}
return (n / g) ;
}

se eu colocar "final int g = n;" ao invés de colocar "final double g=n;" , o resultado de n/g não vem como esperado. sei que é por que ele pega apenas a parte inteira do resultado, mas pensei que o "double calcula média" que determinaria se o retorno de n/g seria um inteiro ou não, mas a unica coisa que esse double faz é colocar um zero no final do resultado inteiro.

pq isto acontece?
e pq q alterando apenas de "final int" para "final double" o problema se resolve, apesar de n ainda ser inteiro?

obrigado.


In reply to Bruno Pereira De Fazio

Re: int / double

by Daniel David Mlot Pinheiro -
Bruno, isso deve ser porque o return não faz nada além de pegar o valor do (n/g) exatamente como calculado dentro do parênteses e devolvê-lo como um double. Assim, se n e g forem int o resultado vai ser truncado para um int já dentro do parênteses, não havendo nada que o return possa fazer a respeito (a não ser colocar um monte de zeros após a vírgula...).
In reply to Daniel David Mlot Pinheiro

Re: int / double

by Arthur Gabriel de Santana -
O Daniel está certo, é isso mesmo.

O único detalhe é que quem coloca os zeros depois da vírgula é a própria divisão de double, que retorna um double (a divisão só será inteira se os dois operandos forem inteiros). Tudo o que o return faz é sair do método devolvendo o argumento.