JavaScript function with NaN error

3

Hello.

I'm encountering a problem executing this formula, because the final answer is given as NaN.

In a simplified way to explain the code, it works like this: there are two groups of three variables, and depending on the value you assign to each one, it is worth a certain amount of points. For example, if you assign the number 89 to the variable (NUMBER2), its equivalent in the other group, the variable (BPM_TRUE) will equal 3 points. At the end, the three main variables are multiplied and summed from a specific formula, resulting in the value of (RTS_TRUE).

Can anyone understand what's going on? I've tried switching to float, but to no avail.

<body>
  <script type="text/javascript">
    // <![CDATA[
    /* Calculadora RTS Ivana Mendonca */

    var ECG_TRUE;
    var NUMERO1;
    if (NUMERO1 == '15' || NUMERO1 == '14' || NUMERO1 == '13') {
      ECG_TRUE = 4
    } else
    if (NUMERO1 == '09' || NUMERO1 == '10' || NUMERO1 == '11' || NUMERO1 == '12') {
      ECG_TRUE = 3
    } else
    if (NUMERO1 == '06' || NUMERO1 == '07' || NUMERO1 == '08') {
      ECG_TRUE = 2
    } else
    if (NUMERO1 == '04' || NUMERO1 == '05') {
      ECG_TRUE = 1
    } else
    if (NUMERO1 == '00') {
      ECG_TRUE = 0
    }

    var BPM_TRUE;
    var NUMERO2;
    if (NUMERO2 > '89') {
      BPM_TRUE = 4
    } else
    if (NUMERO2 == '89' || NUMERO2 == '88' || NUMERO2 == '87' || NUMERO2 == '86' || NUMERO2 == '85' || NUMERO2 == '84' || NUMERO2 == '83' || NUMERO2 == '82' || NUMERO2 == '81' || NUMERO2 == '80' || NUMERO2 == '79' || NUMERO2 == '78' || NUMERO2 == '77' || NUMERO2 == '76') {
      BPM_TRUE = 3
    } else
    if (NUMERO2 == '75' || NUMERO2 == '74' || NUMERO2 == '73' || NUMERO2 == '72' || NUMERO2 == '71' || NUMERO2 == '70' || NUMERO2 == '69' || NUMERO2 == '68' || NUMERO2 == '67' || NUMERO2 == '66' || NUMERO2 == '65' || NUMERO2 == '64' || NUMERO2 == '63' || NUMERO2 == '62' || NUMERO2 == '61' || NUMERO2 == '60' || NUMERO2 == '59' || NUMERO2 == '58' || NUMERO2 == '57' || NUMERO2 == '56' || NUMERO2 == '55' || NUMERO2 == '54' || NUMERO2 == '53' || NUMERO2 == '52' || NUMERO2 == '51' || NUMERO2 == '50') {
      BPM_TRUE = 2
    } else
    if (NUMERO2 <= '49' && NUMERO2 != '00') {
      BPM_TRUE = 1
    } else
    if (NUMERO2 == '00') {
      BPM_TRUE = 0
    }

    var FR_TRUE;
    var NUMERO3;
    if (NUMERO3 == '10' || NUMERO3 == '11' || NUMERO3 == '12' || NUMERO3 == '13' || NUMERO3 == '14' || NUMERO3 == '15' || NUMERO3 == '16' || NUMERO3 == '17' || NUMERO3 == '18' || NUMERO3 == '19' || NUMERO3 == '20' || NUMERO3 == '21' || NUMERO3 == '22' || NUMERO3 == '23' || NUMERO3 == '24' || NUMERO3 == '25' || NUMERO3 == '26' || NUMERO3 == '27' || NUMERO3 == '28' || NUMERO3 == '29') {
      FR_TRUE = 4
    } else
    if (NUMERO3 > '29') {
      FR_TRUE = 3
    } else
    if (NUMERO3 == '06' || NUMERO3 == '07' || NUMERO3 == '08' || NUMERO3 == '09') {
      FR_TRUE = 2
    } else
    if (NUMERO3 == '01' || NUMERO3 == '02' || NUMERO3 == '03' || NUMERO3 == '04' || NUMERO3 == '05') {
      FR_TRUE = 1
    }
    if (NUMERO3 == '00') {
      FR_TRUE = 0
    }

    var RTS_TRUE;

    NUMERO1 = prompt('ECG:', 'Digite aqui');
    NUMERO2 = prompt('BPM:', 'Digite aqui');
    NUMERO3 = prompt('FR:', 'Digite aqui');

    RTS_TRUE = parseInt(ECG_TRUE) * 0, 9368 + parseInt(BPM_TRUE) * 0, 7326 + parseInt(FR_TRUE) * 0, 2908;

    document.write('O resultado equivale a: ', RTS_TRUE);

    // ]]>
  </script>

</body>
    
asked by anonymous 08.11.2017 / 21:54

4 answers

1

In% with% decimal numbers are represented with JavaScript (dot) and not with . (comma).

This part of the code:

RTS_TRUE = parseInt(ECG_TRUE) * 0, 9368 + parseInt(BPM_TRUE) * 0, 7326 + parseInt(FR_TRUE) * 0, 2908;

Should be:

RTS_TRUE = parseInt(ECG_TRUE) * 0.9368 + parseInt(BPM_TRUE) * 0.7326 + parseInt(FR_TRUE) * 0.2908;

Another error is that you are using the , , NUMERO1 , and NUMERO2 values before capturing them using the NUMERO3 function.

Soon it will look like this:

<body>
  <script type="text/javascript">
    // <![CDATA[
    /* Calculadora RTS Ivana Mendonca */
    var NUMERO1, NUMERO2, NUMERO3;
    
    NUMERO1= prompt('ECG:', 'Digite aqui');
    NUMERO2 = prompt('BPM:', 'Digite aqui');
    NUMERO3 = prompt('FR:', 'Digite aqui');    

    var ECG_TRUE;
    if (NUMERO1 == '15' || NUMERO1 == '14' || NUMERO1 == '13') {
      ECG_TRUE = 4
    } else
    if (NUMERO1 == '09' || NUMERO1 == '10' || NUMERO1 == '11' || NUMERO1 == '12') {
      ECG_TRUE = 3
    } else
    if (NUMERO1 == '06' || NUMERO1 == '07' || NUMERO1 == '08') {
      ECG_TRUE = 2
    } else
    if (NUMERO1 == '04' || NUMERO1 == '05') {
      ECG_TRUE = 1
    } else
    if (NUMERO1 == '00') {
      ECG_TRUE = 0
    }

    var BPM_TRUE;
    if (NUMERO2 > '89') {
      BPM_TRUE = 4
    } else
    if (NUMERO2 == '89' || NUMERO2 == '88' || NUMERO2 == '87' || NUMERO2 == '86' || NUMERO2 == '85' || NUMERO2 == '84' || NUMERO2 == '83' || NUMERO2 == '82' || NUMERO2 == '81' || NUMERO2 == '80' || NUMERO2 == '79' || NUMERO2 == '78' || NUMERO2 == '77' || NUMERO2 == '76') {
      BPM_TRUE = 3
    } else
    if (NUMERO2 == '75' || NUMERO2 == '74' || NUMERO2 == '73' || NUMERO2 == '72' || NUMERO2 == '71' || NUMERO2 == '70' || NUMERO2 == '69' || NUMERO2 == '68' || NUMERO2 == '67' || NUMERO2 == '66' || NUMERO2 == '65' || NUMERO2 == '64' || NUMERO2 == '63' || NUMERO2 == '62' || NUMERO2 == '61' || NUMERO2 == '60' || NUMERO2 == '59' || NUMERO2 == '58' || NUMERO2 == '57' || NUMERO2 == '56' || NUMERO2 == '55' || NUMERO2 == '54' || NUMERO2 == '53' || NUMERO2 == '52' || NUMERO2 == '51' || NUMERO2 == '50') {
      BPM_TRUE = 2
    } else
    if (NUMERO2 <= '49' && NUMERO2 != '00') {
      BPM_TRUE = 1
    } else
    if (NUMERO2 == '00') {
      BPM_TRUE = 0
    }

    var FR_TRUE;
    if (NUMERO3 == '10' || NUMERO3 == '11' || NUMERO3 == '12' || NUMERO3 == '13' || NUMERO3 == '14' || NUMERO3 == '15' || NUMERO3 == '16' || NUMERO3 == '17' || NUMERO3 == '18' || NUMERO3 == '19' || NUMERO3 == '20' || NUMERO3 == '21' || NUMERO3 == '22' || NUMERO3 == '23' || NUMERO3 == '24' || NUMERO3 == '25' || NUMERO3 == '26' || NUMERO3 == '27' || NUMERO3 == '28' || NUMERO3 == '29') {
      FR_TRUE = 4
    } else
    if (NUMERO3 > '29') {
      FR_TRUE = 3
    } else
    if (NUMERO3 == '06' || NUMERO3 == '07' || NUMERO3 == '08' || NUMERO3 == '09') {
      FR_TRUE = 2
    } else
    if (NUMERO3 == '01' || NUMERO3 == '02' || NUMERO3 == '03' || NUMERO3 == '04' || NUMERO3 == '05') {
      FR_TRUE = 1
    }
    if (NUMERO3 == '00') {
      FR_TRUE = 0
    }

    var RTS_TRUE;

    RTS_TRUE = parseInt(ECG_TRUE) * 0.9368 + parseInt(BPM_TRUE) * 0.7326 + parseInt(FR_TRUE) * 0.2908;

    document.write('O resultado equivale a: ', RTS_TRUE);
    // ]]>
  </script>
</body>
    
08.11.2017 / 22:00
1

Comrade, is giving Not a Number (NaN) because if you enter a value that is not within the comparisons, no value will be set in the ECG_TRUE, BPM_TRUE and FR_TRUE variables. So instead of comparing at the end with 0, I put as default option if it does not match any value tested before. (but make sure it influences your calculation)

<body>
    <script type="text/javascript">
    // <![CDATA[
        /* Calculadora RTS Ivana Mendonca */

         var NUMERO1, NUMERO2, NUMERO3;

            NUMERO1 = prompt('ECG:', 'Digite aqui');
            NUMERO2 = prompt('BPM:', 'Digite aqui');
            NUMERO3 = prompt('FR:', 'Digite aqui');   
            
            NUMERO1 = parseInt(NUMERO1);
            NUMERO2 = parseInt(NUMERO2);
            NUMERO3 = parseInt(NUMERO3);

        var ECG_TRUE;
            if (NUMERO1 == 15 || NUMERO1 == 14 || NUMERO1 == 13) 
            {
              ECG_TRUE=4;
            }   
            else
            if (NUMERO1 == 9 || NUMERO1 == 10 || NUMERO1 == 11 || NUMERO1 == 12) 
            {
              ECG_TRUE=3; 
            }    
            else
            if (NUMERO1 == 6 || NUMERO1 == 7
                 || NUMERO1 == 8) 
            {
              ECG_TRUE=2;
            }    
            else
            if (NUMERO1 == 4 || NUMERO1 == 5) 
            {
              ECG_TRUE=1;
            }    
            else
            {
              ECG_TRUE=0;
            }  


        var BPM_TRUE;
            if (NUMERO2 > 89) 
            {
              BPM_TRUE=4;
            }    
            else
            if (NUMERO2 == 89 || NUMERO2 == 88 || NUMERO2 == 87 || NUMERO2 == 86 || NUMERO2 == 85 || NUMERO2 == 84 || NUMERO2 == 83 || NUMERO2 == 82 || NUMERO2 == 81 || NUMERO2 == 80 || NUMERO2 == 79 || NUMERO2 == 78 || NUMERO2 == 77 || NUMERO2 == 76) 
            {
              BPM_TRUE=3;
            }    
            else
            if (NUMERO2 == 75 || NUMERO2 == 74 || NUMERO2 == 73 || NUMERO2 == 72 || NUMERO2 == 71 || NUMERO2 == 70 || NUMERO2 == 69 || NUMERO2 == 68 || NUMERO2 == 67 || NUMERO2 == 66 || NUMERO2 == 65 || NUMERO2 == 64 || NUMERO2 == 63 || NUMERO2 == 62 || NUMERO2 == 61 || NUMERO2 == 60 || NUMERO2 == 59 || NUMERO2 == 58 || NUMERO2 == 57 || NUMERO2 == 56 || NUMERO2 == 55 || NUMERO2 == 54 || NUMERO2 == 53 || NUMERO2 == 52 || NUMERO2 == 51 || NUMERO2 == 50) 
            {
              BPM_TRUE=2;
            }    
            else
            if (NUMERO2 <= 49 && NUMERO2 != 0) 
            {
              BPM_TRUE=1;
            }    
            else
            {
              BPM_TRUE=0;
            } 

            

        var FR_TRUE;
            if (NUMERO3 == 10 || NUMERO3 == 11 || NUMERO3 == 12 || NUMERO3 == 13 || NUMERO3 == 14 || NUMERO3 == 15 || NUMERO3 == 16 || NUMERO3 == 17 || NUMERO3 == 18 || NUMERO3 == 19 || NUMERO3 == 20 || NUMERO3 == 21 || NUMERO3 == 22 || NUMERO3 == 23 || NUMERO3 == 24 || NUMERO3 == 25 || NUMERO3 == 26 || NUMERO3 == 27 || NUMERO3 == 28 || NUMERO3 == 29) 
            {
              FR_TRUE=4;
            } 
            else
            if (NUMERO3 > 29) 
            {
              FR_TRUE=3;
            } 
            else
            if (NUMERO3 == 6 || NUMERO3 == 7 || NUMERO3 == 8 || NUMERO3 == 9) 
            {
              FR_TRUE=2;
            } 
            else
            if (NUMERO3 == 1 || NUMERO3 == 2 || NUMERO3 == 3 || NUMERO3 == 4 || NUMERO3 == 5) 
            {
              FR_TRUE=1;
            }
            else
            {
              FR_TRUE=0;
            } 

        var RTS_TRUE;


      ECG_TRUE = ECG_TRUE * 0.9368;
      
      BPM_TRUE = BPM_TRUE * 0.7326;
      
      FR_TRUE = FR_TRUE * 0.2908;

      RTS_TRUE = ECG_TRUE + BPM_TRUE + FR_TRUE; 

        document.write('O resultado equivale a: ', RTS_TRUE);

    // ]]>
    </script>

</body>
    
09.11.2017 / 03:45
1

A suggestion with code optimizations, and using some functions:

var ECG_TRUE,
BPM_TRUE,
FR_TRUE;

checa = {
   ECG: function(NUMERO1) {
       if (NUMERO1 == null){
          return null;
       } else
       if (NUMERO1 >= 13 && NUMERO1 <= 15) {
         ECG_TRUE = 4
       } else
       if (NUMERO1 >= 9 && NUMERO1 <= 12) {
         ECG_TRUE = 3
       } else
       if (NUMERO1 >= 6 && NUMERO1 <= 8) {
         ECG_TRUE = 2
       } else
       if (NUMERO1 == 4 || NUMERO1 == 5) {
         ECG_TRUE = 1
       } else
       if (NUMERO1 == 0) {
         ECG_TRUE = 0
       }else{
          alert("Número inválido!");
          return false;
       }
       return true;
   },
   BPM: function(NUMERO2) {
       if (NUMERO2 == null){
          return null;
       } else
       if (NUMERO2 > 89) {
         BPM_TRUE = 4
       } else
       if (NUMERO2 >= 76 && NUMERO2 <= 89) {
         BPM_TRUE = 3
       } else
       if (NUMERO2 >= 50 && NUMERO2 <= 75) {
         BPM_TRUE = 2
       } else
       if (NUMERO2 <= 49 && NUMERO2 != 0) {
         BPM_TRUE = 1
       } else
       if (NUMERO2 == 0) {
         BPM_TRUE = 0
       }
       return true;
   },
   FR: function(NUMERO3) {
       if (NUMERO3 == null){
          return null;
       } else
       if (NUMERO3 >= 10 && NUMERO3 <= 29) {
         FR_TRUE = 4
       } else
       if (NUMERO3 > 29) {
         FR_TRUE = 3
       } else
       if (NUMERO3 >= 6 && NUMERO3 <= 9) {
         FR_TRUE = 2
       } else
       if (NUMERO3 >= 1 && NUMERO3 <= 5) {
         FR_TRUE = 1
       } else
       if (NUMERO3 == 0) {
         FR_TRUE = 0
       }
       return true;
   }
}

function perguntar(){
   p1 = checa.ECG(prompt('ECG:', 'Digite aqui'));
   
   if(p1){
      p2 = checa.BPM(prompt('BPM:', 'Digite aqui'));

      if(p2){
         p3 = checa.FR(prompt('FR:', 'Digite aqui'));
         
         if(p3){

            var RTS_TRUE;
   
            RTS_TRUE = parseInt(ECG_TRUE) * 0.9368 + parseInt(BPM_TRUE) * 0.7326 + parseInt(FR_TRUE) * 0.2908;
   
            document.write('O resultado equivale a: '+ RTS_TRUE);
         }
      }
   }else if(p1 != null){
      perguntar();
   }
}

perguntar();
    
09.11.2017 / 01:30
0

The code ran, but then stopped again and gave the same answer NaN without me making any changes. Now that I'm not understanding anything else ...

I made some corrections and it stayed like this until the moment that it rolled:

<body>
    <script type="text/javascript">
    // <![CDATA[
        /* Calculadora RTS Ivana Mendonca */

         var NUMERO1, NUMERO2, NUMERO3;

            NUMERO1 = prompt('ECG:', 'Digite aqui');
            NUMERO2 = prompt('BPM:', 'Digite aqui');
            NUMERO3 = prompt('FR:', 'Digite aqui');   

        var ECG_TRUE;
            if (NUMERO1 == 15 || NUMERO1 == 14 || NUMERO1 == 13) {
                ECG_TRUE=4
            }   else
            if (NUMERO1 == 09 || NUMERO1 == 10 || NUMERO1 == 11 || NUMERO1 == 12) 
            {ECG_TRUE=3}    else
            if (NUMERO1 == 06 || NUMERO1 == 07
                 || NUMERO1 == 08) 
            {ECG_TRUE=2}    else
            if (NUMERO1 == 04 || NUMERO1 == 05) 
            {ECG_TRUE=1}    else
            if (NUMERO1 == 00) 
            {ECG_TRUE=0}  

        var BPM_TRUE;
            if (NUMERO2 > 89) 
            {BPM_TRUE=4}    else
            if (NUMERO2 == 89 || NUMERO2 == 88 || NUMERO2 == 87 || NUMERO2 == 86 || NUMERO2 == 85 || NUMERO2 == 84 || NUMERO2 == 83 || NUMERO2 == 82 || NUMERO2 == 81 || NUMERO2 == 80 || NUMERO2 == 79 || NUMERO2 == 78 || NUMERO2 == 77 || NUMERO2 == 76) 
            {BPM_TRUE=3}    else
            if (NUMERO2 == 75 || NUMERO2 == 74 || NUMERO2 == 73 || NUMERO2 == 72 || NUMERO2 == 71 || NUMERO2 == 70 || NUMERO2 == 69 || NUMERO2 == 68 || NUMERO2 == 67 || NUMERO2 == 66 || NUMERO2 == 65 || NUMERO2 == 64 || NUMERO2 == 63 || NUMERO2 == 62 || NUMERO2 == 61 || NUMERO2 == 60 || NUMERO2 == 59 || NUMERO2 == 58 || NUMERO2 == 57 || NUMERO2 == 56 || NUMERO2 == 55 || NUMERO2 == 54 || NUMERO2 == 53 || NUMERO2 == 52 || NUMERO2 == 51 || NUMERO2 == 50) 
            {BPM_TRUE=2}    else
            if (NUMERO2 <= 49 && NUMERO2 != 00) 
            {BPM_TRUE=1}    else
            if (NUMERO2 == 00) 
            {BPM_TRUE=0} 

        var FR_TRUE;
            if (NUMERO3 == 10 || NUMERO3 == 11 || NUMERO3 == 12 || NUMERO3 == 13 || NUMERO3 == 14 || NUMERO3 == 15 || NUMERO3 == 16 || NUMERO3 == 17 || NUMERO3 == 18 || NUMERO3 == 19 || NUMERO3 == 20 || NUMERO3 == 21 || NUMERO3 == 22 || NUMERO3 == 23 || NUMERO3 == 24 || NUMERO3 == 25 || NUMERO3 == 26 || NUMERO3 == 27 || NUMERO3 == 28 || NUMERO3 == 29) 
            {FR_TRUE=4} else
            if (NUMERO3 > 29) 
            {FR_TRUE=3} else
            if (NUMERO3 == 06 || NUMERO3 == 07 || NUMERO3 == 08 || NUMERO3 == 09) 
            {FR_TRUE=2} else
            if (NUMERO3 == 01 || NUMERO3 == 02 || NUMERO3 == 03 || NUMERO3 == 04 || NUMERO3 == 05) 
            {FR_TRUE=1}
            if (NUMERO3 == 00) 
            {FR_TRUE=0} 

        var RTS_TRUE;

        RTS_TRUE = parseInt(ECG_TRUE) * 0.9368 + parseInt(BPM_TRUE) * 0.7326 + parseInt(FR_TRUE) * 0.2908;

        document.write('O resultado equivale a: ', RTS_TRUE);

    // ]]>
    </script>

</body>
    
08.11.2017 / 22:52