3
respostas

parseInt no cáculo do IMC

Bom dia, pessoal!

Não entendi por que não foi necessário incluir o parseInt no cálculo do IMC (detalhado abaixo) e mesmo assim funcionou corretamente.

<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 seu nome");
var alturaInformada = prompt(nome + ", informe sua altura");
var pesoInformado = prompt(nome + ", informe seu peso");

var imc = calculaImc(alturaInformada, pesoInformado);

document.write(nome + ", o seu IMC calculado é " + imc);

</script>
3 respostas

Olá Ataize, tudo bem?

A função prompt sempre retorna uma string, ou seja, texto. Todo texto em JS é representado por aspas: "texto". Todo número não tem essas aspas 123.

Porém a linguagem JavaScript ela tem uma espécie de mecanismo de conversão automática, onde ela entende que se temos um texto multiplicado por outro, pode ser que aquele texto seja um número e não um texto, logo ela converte o texto para número automaticamente e depois tenta fazer a conta.

Por exemplo:

Se usando a linguagem calculamos 5 * 10, o resultado é 50. Se usando a linguagem calculamos 5 / 10, o resultado é 0.5.

Até aqui sem problemas porque é número vezes número e número dividido por número. Porém, aqui começa a ficar interessante:

Se usando a linguagem calculamos "5" * 10, o resultado é 50. Se usando a linguagem calculamos "5" / 10, o resultado é 50.

Observe que 5 está entre aspas porque é um texto. Ele consegue fazer a conta porque ele usa esse mecanismo de conversão automática.

Porém, se somamos um texto + número, ele entende que tudo é texto, logo ele não faz o cálculo, ele concatena.

Se usando a linguagem calculamos "5" + 10, o resultado é 510.

Quando na função calculaImc passamos um texto, ele converte automaticamente para número porque a função só tem divisão e multiplicação.

function calculaImc(altura, peso) {

        return peso / (altura * altura);
}

Se essa função tivesse alguma soma dentro dela, por exemplo, altura + altura ele iria concatenar os números. Porém como só tem multiplicação e divisão, ele entende que precisa converter de string para número. De "5" para 5 por exemplo.

Depois me fala se conseguiu ficar mais claro. Forte abraço!

Tive o mesmo problema. Gratidão, Matheus.

Estava com a mesma dúvida, obrigada pela explicação!