
eu espero que tenhas dado certo por que eu tentei pelo int e deu erro
so depois eu me lembrei que podia fazer desse jeito, to pegando o jeito. mas no google diz que é 63 não 62 entao acho que devo ter feito algo errado

eu espero que tenhas dado certo por que eu tentei pelo int e deu erro
so depois eu me lembrei que podia fazer desse jeito, to pegando o jeito. mas no google diz que é 63 não 62 entao acho que devo ter feito algo errado
Olá, Otavio. Como vai?
Pode ficar tranquilo porque o seu código funcionou perfeitamente e você aplicou os conceitos de forma corretíssima! O que aconteceu aí não foi um erro de lógica seu, mas sim um comportamento padrão do Java na hora de converter números decimais para inteiros.
Vou te explicar exatamente por que deu 62°F no seu código enquanto o Google mostrou 63°F:
Se fizermos a conta exata utilizando a fórmula que você inseriu:17 * 1.8 + 32 resulta em 30.6 + 32, que é igual a 62.6.
Quando o Google exibe o resultado, ele faz um arredondamento matemático padrão para a casa mais próxima. Como 62.6 está mais perto de 63 do que de 62, ele arredonda para cima, mostrando 63°F.
No seu segundo print, você utilizou uma técnica chamada Casting explícito ao colocar o (int) antes do cálculo:
int conversaoParaFahrenheit = (int) (TemperaturaEmCelsius * 1.8) + 32;
A palavra-chave (int) diz para o Java o seguinte: "Pegue esse número que tem casas decimais e force ele a virar um número inteiro".
Só que o Java não arredonda o número para o valor mais próximo; ele simplesmente descarta/corta tudo o que vem depois da vírgula (chamamos isso de truncamento). Portanto, o valor 62.6 perde a sua parte decimal e vira estritamente 62.
Se você quiser que o Java faça o arredondamento matemático correto em vez de apenas cortar as casas decimais, você pode utilizar a biblioteca matemática nativa do Java, trocando o (int) por Math.round().
Seu código ficaria assim:
public class ConversaoDeTemperatura {
public static void main() {
int TemperaturaEmCelsius = 17;
// O Math.round arredonda 62.6 para 63 de forma matemática
long conversaoParaFahrenheit = Math.round((TemperaturaEmCelsius * 1.8) + 32);
System.out.println("A temperatura em Fahrenheit é " + conversaoParaFahrenheit + "°F");
}
}
O seu primeiro código usando double também estava certíssimo (ele exibiu 62.6°F, que é o valor exato). Lembrar do Casting para resolver o problema com o tipo int mostra que você está pegando o jeito e evoluindo muito bem na linguagem. Parabéns pela persistência!
Espero que possa ter lhe ajudado!