Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Duda] Duda sobre condicionales en funciones

Hola comunidad, tengo una duda. Lo que pasa es que intenté mejorar mi código de IMC, agregándole más dinámica, y salió bien, pero cuando quise que me avise en q intervalo estoy según el IMC, mi dato entra en todos los if y no entiendo porque. Adjunto mi código aquí abajo

<meta charset="UTF-8">

    <h1> Calculadora de IMC </h1>
<html>
<body>

    <br>

    <label for="peso"> Ingrese su peso: </label> 
    <input type="text" id="peso" name="peso" value="" /> 
    <br><br>
    <label for="altura"> Ingrese su altura: </label> 
    <input type="text" id="altura" name="altura"/> 
    <br><br>
    <button> Calcular IMC </button>
        <script type="text/javascript">
            function tuImc() {
                var altura = document.getElementById('altura');
                var peso = document.getElementById('peso');
                var p = parseInt(peso.value);
                var a = parseInt(altura.value);
                var imc = p / (a*a);
                console.log(a);
                console.log(p);
                console.log(imc);

                if (imc < 18,5){
                    alert("Tu IMC es " + Math.round(imc) + " y tienes Insuficiencia ponderal.");
                }
                if (imc >= 18,5 && imc <= 24,9){
                    alert("Tu IMC es " + Math.round(imc) + " peso normal");
                }
                if (imc >= 25 && imc <=29,9){
                    alert("Tu IMC es " + Math.round(imc) + " tienes pre-obesidad");
                }
                if (imc >=30) {
                    alert("Tu IMC es " + Math.round(imc) + " tienes obesidad");
                }
                peso.value = "";
                altura.value = "";
                peso.focus();
            }

            var button = document.querySelector("button");
            button.onclick = tuImc;

        </script>
</body>
</html>
1 respuesta

Buenas, creo que tu problema es porque en todos los if ... ejemplo:

 if (imc < **18,5**){

el numero 18.5 y en los otros if los otros numeros lo agregas con la coma "," y es con punto "."

 if (imc < **18.5**){

y cuando parseas ten en cuenta los tipos de variables, la altura ingresas con puntos es un flotantes asi que usa parseFloat() El script te quedaria algo asi:

<script type="text/javascript">
            function tuImc() {
                var altura = document.getElementById('altura');
                var peso = document.getElementById('peso');
                // no te acostumbres a usar esos nombres de variables "p" y "a" porque no significan nada
                // usa "peso" y "altura" como nombre de varaible, en este caso el codigo es corto pero si es 
                // mas largo cuesta saber que  representa cada varable.... create la costumbre de dar nombres
                // representativos...
                var p = parseInt(peso.value);
                var a = parseFloat(altura.value);
                 // aca redondea una sola vez asi no tienes que redondear dentro de los if
                var imc = Math.round(p / (a*a));

                if (imc < 18.5){
                    alert("Tu IMC es " + imc + " y tienes Insuficiencia ponderal.");
                }
                if (imc >= 18.5 && imc <= 24.9){
                    alert("Tu IMC es " + imc + " peso normal");
                }
                if (imc >= 25 && imc <=29.9){
                    alert("Tu IMC es " + imc + " tienes pre-obesidad");
                }
                if (imc >=30) {
                    alert("Tu IMC es " + imc + " tienes obesidad");
                }                
                peso.focus();
            }

            var button = document.querySelector("button");
            button.onclick = tuImc;

        </script>