2011-11-17 21 views
17

Tiene una pregunta rápida de JS. ¿Cuál es la diferencia entre math.round y parseInt?math.round vs parseInt

Hice un script JS para resumir los inversos de los números se le solicite:

<script type="text/javascript"> 
    var numRep = prompt("How many repetitions would you like to run?"); 
    var sum = 0; 
    var count = 0; 
    var i = 1;  //variable i becomes 1 


    while (i <= numRep) {// repeat 5 times 

     var number = prompt("Please enter a non zero integer"); 

     if(number==0){ 
     document.write("Invalid Input <br>"); 
count++; 
     } 
     else{ 
      document.write("The inverse is: " + 1/number + "<br>"); 
      sum = sum + (1/parseInt(number)); //add number to the sum 
     } 

     i++; //increase i by 1 
    } 

    if (sum==0){ 
    document.write("You did not enter valid input");} 
    else { document.write("The sum of the inverses is: " + sum); //display sum 
    } 
    </script></body></html> 

y se utiliza parseInt. Si quisiera hacer uso de math.round, ¿hay algo más que deba hacer para que sepa limitar el número de decimales en consecuencia?

En otras palabras, ¿tiene que formatearse math.round de cierta manera?

+5

que está comparando manzanas y naranjas. 'parseInt' convierte una cadena en un entero, mientras que' Math.round() '- redondea un número de coma flotante. –

+0

pero lo que pasa con parseInt es que parece siempre redondear números, como por ejemplo fractors, a un número razonable de caracteres, mientras que math.round parece redondo solo a números enteros – Chris

+0

Nota al margen: cuando se trata de redondear, parseInt es significativamente más lento que Math.round: http://jsperf.com/math-floor-vs-math-round-vs-parseint/55 –

Respuesta

33

Las dos funciones son realmente muy diferentes.

parseInt() extrae un número de una cadena, p.

parseInt('1.5') 
// => 1 

Math.round() redondea el número al número entero más próximo:

Math.round('1.5') 
// => 2 

parseInt() puede obtener su número mediante la eliminación de texto adicional, por ejemplo:

parseInt('12foo') 
// => 12 

Sin embargo, no lo hará Math.round :

Math.round('12foo') 
// => NaN 

que es mejor usar parseFloat y Math.round ya que está recibiendo la entrada del usuario:

var number = parseFloat(prompt('Enter number:')); 
var rounded = Math.round(number); 
+0

¿Hay alguna manera de hacer que Math.round redondee a, digamos 3 decimales? – Chris

+6

La única forma en que sé hacer eso es hacer trampa: 'Math.round (1.23456 * 1000)/1000' –

+0

Eso funciona :) ¡Muchas gracias! – Chris

3

Math.round redondeará el número al número entero más cercano. parseInt le asegurará que el valor es un número

Así que lo que se necesita es algo como esto:

number = parseInt(number); 

if (isNan(number) || number == 0){ 
    document.write("Invalid Input <br>"); 
    count++; 
}

Esto le asegurará que el uso ha puesto en un número