Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

IMC = NaN

Já tentei de diversas, mas não estou conseguindo localizar onde está o erro.

O navegador até pede os dados do usuário, mas falta o mais importante que é o cálculo do IMC.

O resultado que tenho é semelhante a esse:

"Gustavo, o seu IMC é NaN"

Alguém poderia me auxiliar?

<meta charset="utf-8">

<script>

    function pulaLinha(){

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

    }

    function mostra(frase){

        document.write(frase);
        pulaLinha()
    }
    function calculaImc (altura, peso){
        return peso / (altura * altura);

    }

    var nome = prompt("Fala brother, qual seu nome?");
    var alturaInformada = prompt(nome + ", Qual sua altura? ");
    var pesoInformado = prompt(nome + ", Qual seu peso?");
    var imc = calculaImc(alturaInformada, pesoInformado);

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

</script>
2 respostas
solução!

Oi Guilherme o que pode estar acontecendo é que você está utilizando a , ao invés do ponto, para separar a parte inteira da parte fracionária utilizamos o ponto e não a vírgula. Pois a vírgula em Javascript é um operador e já tem outra função definida. Se você substituir a , por . vai ter o resultado do imc corretamente..

Espero ter ajudado e bons estudos.

Oi Guilherme, tudo bom?

Complementando o Maison!

Você provavelmente está entrando valores com virgula flutuante. Entre utilizando o ponto (ex: 1.70). Se você verificar, o tipo de dado que temos na entrada é string.

Temos algo no javascript chamado type coercion, isso significa que só existe comparação entre variáveis depois de convertidos para um tipo em comum, ou seja, se uma variável tem um tipo inteiro e outra tem o tipo string, o interpretador vai tentar adivinhar qual deve ser convertida para realizar a operação pedida. Quando ele dá de cara com algo que não é facilmente mapeado para um inteiro (número com virgula sendo string), esse valor assume NaN (not a number) e todas as futuras operações também!

Você pode simular esse erro com a linha abaixo utilizando o método Number do javascript:

No console do desenvolvedor:

Number("1,70");

*Podemos usar o parseFloat também!

Caso deseje continuar utilizando a virgula, você pode tratar a entrada.

Ex:

var altura = "1,70"
altura = Number(altura.replace(",","."));

Espero ter ajudado!! Qualquer dúvida é só perguntar!

Abraços e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software