2011-11-17 51 views
17

有一個快速的JS問題。 math.round和parseInt有什麼區別?math.round vs parseInt

我做了一個JS腳本來概括提示數字的倒數:

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

,它使用parseInt函數。如果我想使用math.round,還有什麼我需要做的,它知道要相應地限制小數位數?

換句話說,math.round是否必須以某種方式進行格式化?

+5

你比較蘋果和桔子。 'parseInt'將一個字符串轉換爲一個整數,而'Math.round()' - 很好地處理了一個浮點數。 –

+0

但parseInt的東西是,它似乎總是將數字,如fractor例如,以合理數量的字符,而math.round似乎只圓整數 – Chris

+0

旁註:說到舍入,parseInt是比Math.round慢得多:http://jsperf.com/math-floor-vs-math-round-vs-parseint/55 –

回答

33

這兩個函數真的很不一樣。

parseInt()從字符串中提取一個數字,例如,

parseInt('1.5') 
// => 1 

Math.round()回合數最接近的整數:

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

parseInt()可以通過去除多餘的文字獲得其編號,例如:

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

然而,Math.round不會:

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

你或許應該使用parseFloatMath.round因爲你從用戶獲取輸入:

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

有沒有辦法讓Math.round變成小數點後3位? – Chris

+6

我知道這樣做的唯一方法是作弊:'Math.round(1.23456 * 1000)/ 1000' –

+0

這工作:)非常感謝sooo! – Chris

3

Math.round將數字四捨五入爲最接近的整數。 parseInt會向你保證,該值爲數

那麼,你需要的是這樣的:

number = parseInt(number); 

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

這將確保您的使用已經投入了許多