1
resposta

Meu IMC fica dando NaN e não sei como resolver

<meta charset="UTF-8">

<script>

    function pulaLinha() {

        document.write("<br>");
        document.write("<br>");
}

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
}

    function calculaImc(altura, peso) {

        return peso / (altura * altura);
}

var nome = prompt("Informe o seu nome");
var alturaInformada = prompt(nome + ", informe sua altura");
var pesoInformado = prompt(nome + ", informe seu peso");

var imc = calculaImc(alturaInformada, pesoInformado);

mostra(nome + ", o seu IMC é " + imc);

if(imc < 18.5) {

    mostra("Você está abaixo do recomendado");

}

if(imc > 35) {

    mostra("Você está acima do recomendado");
}

if(imc >= 18.5) {

    if(imc <= 35) {

        mostra("Seu IMC está excelente!");

    }
}

</script>
1 resposta

Isso acontece por causa da forma que seu input entende sua respectiva entrada, ou seja, é necessário passar os tipos daqueles valores que serão digitados. Seu código ficou assim:

var nome = prompt("Informe o seu nome");
var alturaInformada = prompt(nome + ", informe sua altura");
var pesoInformado = prompt(nome + ", informe seu peso");

Enquanto a maneira correta deveria ser (repassando o valor float para os valores que serão digitados - se quiser, pode usar o double também - vai depender do seu objetivo):

var alturaInformada = parseFloat(prompt(nome + ", informe sua altura"));
var pesoInformado = parseFloat(prompt(nome + ", informe seu peso"));

No exemplo citado por você acima ele está lendo simplesmente em forma de texto, e acredito que não é desta forma que você espera.