2011-11-17 23 views
17

Masz szybkie pytanie JS. Jaka jest różnica między math.round i parseInt?math.round vs parseInt

zrobiłem skrypt JS, aby zsumować odwrotności liczb skłoniły:

<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> 

i wykorzystuje parseInt. Jeśli chciałem użyć math.round, czy jest coś jeszcze, co muszę zrobić, aby odpowiednio ograniczyć liczbę miejsc dziesiętnych?

Innymi słowy, czy math.round musi być sformatowany w określony sposób?

+5

Ty porównywanie jabłek i pomarańczy. 'parseInt' konwertuje łańcuch na liczbę całkowitą, podczas gdy' Math.round() '- well - zaokrągla liczbę zmiennoprzecinkową. –

+0

Ale rzecz z parsentem polega na tym, że wydaje się zawsze zaokrąglać liczby, na przykład, na przykład, frakcje, do rozsądnej liczby znaków, podczas gdy matematyka.round wydaje się być okrągła tylko do liczb całkowitych – Chris

+0

Uwaga boczna: jeśli chodzi o zaokrąglanie, parseInt jest znacznie wolniej niż Math.round: http://jsperf.com/math-floor-vs-math-round-vs-parseint/55 –

Odpowiedz

33

te dwie funkcje są naprawdę bardzo różne.

parseInt() wyodrębnia liczbę z ciągu znaków, np.

parseInt('1.5') 
// => 1 

Math.round() rundy numer do najbliższej liczby całkowitej:

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

parseInt() może dostać jego numer usuwając dodatkowy tekst, np:

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

Jednak Math.round nie będzie :

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

Powinieneś raczej użyć parseFloat i Math.round ponieważ jesteś coraz wejście od użytkownika:

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

Czy istnieje sposób, aby Math.round zaokrąglić do, powiedzmy 3 miejsca po przecinku? – Chris

+6

Jedyny sposób, w jaki to robię, to oszukiwanie: 'Math.round (1.23456 * 1000)/1000' –

+0

To działa :) Dzięki sooo much! – Chris

3

Math.round zaokrągli liczbę do najbliższej liczby całkowitej. parseInt będzie zapewnić, że wartość jest liczbą

Co więc trzeba będzie coś takiego:

number = parseInt(number); 

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

Będzie to zapewniam cię, że stosowanie wprowadziła szereg

Powiązane problemy