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

Trocando Ponto por Vírgula

Bom, vi que outros alunos chegaram a perguntar, mas talvez não haja uma solução definitiva. A minha dúvida é a seguinte:

Como podemos fazer com que o usuário ao digitar a altura dele e utilizando a vírgula (o que é bem comum no dia a dia quando nos referimos a ela) tenha essa sinalização revertida para o ponto de modo que o nosso resultado do IMC não apresente a falha NaN (not a number)?! Eu entendo o motivo da falha, mas não sei ajustar a conversão.

Em minhas pesquisas notei que uma atribuição chamada de .replace(" . " , " , ") pode ser inseria no cálculo tal qual o .toFixed(2). Bom, no meu caso eu inseri o replace no final do cálculo do IMC, no retorno dado pela função, e nada do ajuste ser feito! Pra ser sincero, inseri ele em diversos pontos do código, mas até agora não obtive sucesso na exibição do IMC.

Alguém com mais experiência tem outra solução? Ou sabe onde seria mais certo jogar essa atribuição?

var titulo = document.querySelector(".titulo");
titulo.textContent = "Aparecida Nutricionista";

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 tdGordura = paciente.querySelector(".info-gordura");
    var gordura = tdGordura.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 (pesoEhValido && alturaEhValida) {
        var imc = calculaImc(peso, altura);
        tdImc.textContent = imc;
    }
}

function calculaImc(peso, altura) {
    var imc = 0;
    imc = peso / (altura * altura);
    return imc.toFixed(2).replace(".", ",");

}
2 respostas
solução!

Olá Milton, tudo bem?

Você está aplicando o replace() em um número e ele é um método exclusivo de string. Tente aplicá-lo aqui:

var altura = tdAltura.textContent.replace(",",  ".");

E você colocou o ponto e a vírgula invertida dentro do replace().

Testa aí e nos diga o resultado.

Opa André, realmente, deu tudo certo! Muito obrigado!