Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
12
respostas

O imc não é calculado e no lugar aparecem as letras NaN

boa tarde estou no final de uma aula para terminar de calcular o imc mas ao invés de calcular ele me retorna NaN já olhei em todo o código e não encontro o motivo

12 respostas

Henrique, boa tarde!

Isso significa que você está tentando fazer uma operação matemática em uma variável que não é um número. Tente verificar se ambas são. E para que possamos lhe auxiliar melhor. Compartilhe o seu código para que possamos testar!

Referência: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/NaN

Espero ter ajudado e bons estudos

var titulo = document.querySelector(".titulo");
titulo.textContent = "Salamaleico";

var pacientes = document.querySelectorAll(".paciente");

for(var i = 0; i < pacientes.length ; i++){
  var paciente = pacientes[i];

  var tdpeso = paciente.querySelector(".info-peso");
  var peso = tdpeso.textContent;

  var tdaltura = paciente.querySelector(".info-altura");
  var altura = tdaltura.textContent;

  var tdimc = paciente.querySelector(".info-imc");

  var pesoehvalido = true;
  var alturaehvalida = true;

  if(peso <= 0 || peso >= 1000){
    console.log("Peso Inválido");
    pesoehvalido = false;
    tdimc.textContent = "Peso Inválido";
    paciente.classList.add("paciente-invalido");
  }

  if(altura <= 0 || altura >= 3.00){
    console.log("altura inválida");
    alturaehvalida = false;
    tdimc.textContent = "altura Inválida";
    paciente.classList.add("paciente-invalido");
  }

  if(alturaehvalida && pesoehvalido){
  var imc = calculaImc(peso,altura);
  tdimc.textContent = imc;
  }
}

function calculaImc(peso,altura){
  var imc = 0;

  imc = peso / (altura * altura);

  return imc.toFixed(2);
}

Boa tarde segue meu código da parte que estaria fazendo o calculo

var botaoAdcionar = document.querySelector("#adicionar-paciente");
botaoAdcionar.addEventListener("click",function(event){
  event.preventDefault();

  var form = document.querySelector("#form-adiciona");

  var nome = form.nome.value;
  var peso = form.peso.value;
  var altura = form.altura.value;
  var gordura = form.gordura.value;


  var pacienteTr = document.createElement("tr");

  var nomeTd = document.createElement("td");
  var pesoTd = document.createElement("td");
  var alturaTd = document.createElement("td");
  var gorduraTd = document.createElement("td");
  var imcTd = document.createElement("td");

  nomeTd.textContent = nome;
  pesoTd.textContent = peso;
  alturaTd.textContent = altura;
  gorduraTd.textContent = gordura;
  imcTd.textContent = calculaImc(peso,altura);

  pacienteTr.appendChild(nomeTd);
  pacienteTr.appendChild(pesoTd);
  pacienteTr.appendChild(alturaTd);
  pacienteTr.appendChild(gorduraTd);
  pacienteTr.appendChild(imcTd);

  var tabela = document.querySelector("#tabela-pacientes");

  tabela.appendChild(pacienteTr);


});

e este o código que receberia o valor e colocaria na tabela

Boa noite, Henrique! Como vai?

Vc poderia colar aqui o HTML também? Assim poderemos testar e verificar o que está ocorrendo pra tentar te ajudar!

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

<!DOCTYPE html>
<html lang="pt-br">
    <head>
        <meta charset="UTF-8">
        <title>Aparecida Nutrição</title>
        <link rel="icon" href="favicon.ico" type="image/x-icon">
        <link rel="stylesheet" type="text/css" href="css/reset.css">
        <link rel="stylesheet" type="text/css" href="css/index.css">



    </head>
    <body>



        <header>
            <div class="container">
                <h2 class="titulo">Aparecida Nutrição</h2>
            </div>
        </header>
        <main>
            <section class="container">
                <h2>Meus pacientes</h2>
                <table>
                    <thead>
                        <tr>
                            <th>Nome</th>
                            <th>Peso(kg)</th>
                            <th>Altura(m)</th>
                            <th>Gordura Corporal(%)</th>
                            <th>IMC</th>
                        </tr>
                    </thead>
                    <tbody id="tabela-pacientes">
                        <tr class="paciente" id="primeiro-paciente">
                            <td class="info-nome">Paulo</td>
                            <td class="info-peso">100</td>
                            <td class="info-altura">2.00</td>
                            <td class="info-gordura">10</td>
                            <td class="info-imc">0</td>
                        </tr>

                        <tr class="paciente" >
                            <td class="info-nome">João</td>
                            <td class="info-peso">80</td>
                            <td class="info-altura">1.72</td>
                            <td class="info-gordura">40</td>
                            <td class="info-imc">0</td>
                        </tr>

                        <tr class="paciente" >
                            <td class="info-nome">Erica</td>
                            <td class="info-peso">54</td>
                            <td class="info-altura">1.64</td>
                            <td class="info-gordura">14</td>
                            <td class="info-imc">0</td>
                        </tr>

                        <tr class="paciente">
                            <td class="info-nome">Douglas</td>
                            <td class="info-peso">85</td>
                            <td class="info-altura">1.73</td>
                            <td class="info-gordura">24</td>
                            <td class="info-imc">0</td>
                        </tr>
                        <tr class="paciente" >
                            <td class="info-nome">Tatiana</td>
                            <td class="info-peso">46</td>
                            <td class="info-altura">1.55</td>
                            <td class="info-gordura">19</td>
                            <td class="info-imc">0</td>
                        </tr>
                    </tbody>
                </table>

            </section>
        </main>

        <section class="container">
    <h2 id="titulo-form">Adicionar novo paciente</h2>
    <form id="form-adiciona">
        <div class="grupo">
            <label for="nome">Nome:</label>
            <input id="nome" name="nome" type="text" placeholder="digite o nome do seu paciente" class="campo">
        </div>
        <div class="grupo">
            <label for="peso">Peso:</label>
            <input id="peso" name="peso" type="text" placeholder="digite o peso do seu paciente" class="campo campo-medio">
        </div>
        <div class="grupo">
            <label for="altura">Altura:</label>
            <input id="altura" name="altura" type="text" placeholder="digite a altura do seu paciente" class="campo campo-medio">
        </div>
        <div class="grupo">
            <label for="gordura">% de Gordura:</label>
            <input id="gordura" type="text" placeholder="digite a porcentagem de gordura do seu paciente" class="campo campo-medio">
        </div>

        <button id="adicionar-paciente" class="botao bto-principal">Adicionar</button>
    </form>
</section>

        <script src="js/calcula-imc.js"></script>
    <script src="js/Form.js"></script>

</html>

Claro, ta ai o código

Já tentei de todas as maneiras efetuar o calculo do imc no código mas mesmo assim continuo tendo o mesmo erro vocês poderiam me ajudar já faz mais de 1 dia que eu mandei o código e até agora não obtive nenhuma resposta que me ajudasse

será que alguém ainda pode me ajudar porque já tem alguns dias e eu estou com os estudos parados por causa do erro

solução!

Olá Henrique,

Depois de testar o código, acredito que o problema seja apenas o uso de números com vírgula, você deve utilizar ponto no lugar.

Eu testei o seu código e funcionou sem problemas com os dados peso = 60 e altura = 1.8

Já testando com peso = 60 e altura = 1,8 o resultado foi NaN.

muito obrigado agora o erro que esta aparecendo é [objectimputHTML] oque seria esse erro?

Opa, Henrique!

Eu peguei os códigos que vc postou no tópico, inseri os dados João, 70, 1.75 e 10, respectivamente nos campos e ao clicar em Adicionar tudo correu como deveria! Em qual momento vc está obtendo o resultado [objectimputHTML]? O que vc tentou fazer?

Outra coisa, o seu código continua esse mesmo que está aqui no tópico ou vc efetuou alguma mudança?

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

ele apresenta isso justamente na hora de adicionar o paciente por mais que digite tudo certo ele copia o paciente de cima e mostra [objectimputHTML], mas ele só mostra isso no nome e na gordura o resto ele copia do paciente de cima

Perdão foi um erro meu eu estava mexendo em um código que continha umas coisa a mais, retirei oque tinha e ele esta funcionando normal, muito obrigado pela ajuda