Desafio Java

Conversão de temperatura com casting e formatação

Enunciado

Crie um programa que converta uma temperatura de Celsius para Fahrenheit usando a fórmula F = C * 9/5 + 32. A temperatura Celsius deve ser um double com valor 36.6. O resultado Fahrenheit deve ser arredondado para inteiro usando casting explícito e impresso no formato Fahrenheit: XX (sem casas decimais).

Requisitos

  • Declare double celsius = 36.6.
  • Calcule fahrenheit = celsius * 9 / 5 + 32 usando promoção numérica.
  • Converta o resultado para int com casting explícito.
  • Imprima exatamente Fahrenheit: 97.

Código inicial

public class ConversaoTemperatura {
    public static void main(String[] args) {
        double celsius = 36.6;
        // Calcule e imprima
    }
}

Saída esperada

Fahrenheit: 97
Ver dica

A fórmula gera um double. Use (int) para truncar a parte decimal. 36.6 * 9 / 5 + 32 = 97.88, que truncado é 97.

Mostrar solução
public class ConversaoTemperatura {
    public static void main(String[] args) {
        double celsius = 36.6;
        double fahrenheit = celsius * 9 / 5 + 32; // promoção: 9/5 é int? Não, 9 e 5 são int, mas celsius é double, então tudo vira double
        int fahrenheitInt = (int) fahrenheit; // casting trunca
        System.out.println("Fahrenheit: " + fahrenheitInt);
    }
}

Passo a passo

  1. Declaramos celsius como double com valor 36.6.
  2. Na expressão celsius * 9 / 5 + 32, a multiplicação celsius * 9 promove 9 para double, resultando em 329.4.
  3. A divisão 329.4 / 5 resulta em 65.88 (double).
  4. Somamos 32, obtendo 97.88.
  5. Aplicamos o casting (int) para converter 97.88 em 97, truncando a parte decimal.
  6. Imprimimos Fahrenheit: 97.

Por que funciona

A promoção numérica converte automaticamente int para double quando misturados, garantindo que a divisão 9 / 5 não seja inteira (o que daria 1). O casting explícito (int) trunca o valor, descartando a parte fracionária, conforme pedido.

Erros comuns

  • Fazer 9 / 5 antes de multiplicar: celsius * (9 / 5) + 32 resultaria em celsius * 1 + 32 = 68.6, pois 9/5 é divisão inteira. Use 9.0 / 5 ou garanta que a multiplicação ocorra primeiro.
  • Esquecer o casting: imprimir diretamente fahrenheit mostraria 97.88, não o inteiro.
  • Usar Math.round em vez de casting: Math.round arredondaria para 98, mas o enunciado pede truncamento com casting.

Outra forma de resolver

Usar Math.round para arredondar em vez de truncar:

int fahrenheitInt = (int) Math.round(fahrenheit);

Isso daria 98, então não atende ao requisito de truncar.

Saída esperada

Fahrenheit: 97