Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Meu código está exibindo a mensagem de você está no peso ideal, sendo que essa condição não está sendo satisfeita e eu não entendo onde estou errando.

$altura = 1.70;
$peso = 78;

$imc = $peso / ($altura * $altura);
$imc = number_format($imc, 2, '.', '');
if ($imc < 18.5) {
    echo "Seu IMC é $imc .Você está com o imc abaixo do nivel recomendado" . PHP_EOL;
} else {
    if ($imc > 18.5 || $imc < 24.9) {
        echo "Seu IMC é $imc .Você está no nivel ideal." . PHP_EOL;
    } else {
        if ($imc > 25 || $imc < 29.9) {
            echo "Seu IMC é $imc .Você está com o imc acima do nivel recomendado, procure o médico." . PHP_EOL; 
        }
    }
}
1 resposta

Olá, Gabriel.

Vamos lá. 2 detalhes:

  1. Você está chamando a função number_format que transforma um número em string. Depois está comparando uma string com números. Isso pode trazer muitos problemas.

  2. Suas condições estão erradas:

    Pensa comigo. No exemplo do seu código, o IMC seria de aproximadamente 26.9.

    No primeiro if ele "pergunta":

    • O IMC é menor do que 18.5? A resposta é não.
    • Então entra no else.
      • Aí tem outro if que pergunta primeiro: "O IMC é maior do que 18.5 OU é menor do que 24.9? A resposta é sim (porque 26.9 é maior do que 18.5), então ele entra nesse IF.

    A correção seria simples: só trocar o primeiro if dentro do else por if ($imc < 24.9) apenas.