2011-11-17 5 views
17

すばらしいJS質問があります。 math.roundとparseIntの違いは何ですか?math.round対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の場合は、フラクタルのような数値は常に妥当な数の文字に丸められているようですが、math.roundは整数に丸めるように見えます。 – Chris

+0

サイドノート:丸めの場合、parseIntはMath.roundよりもかなり遅い:http://jsperf.com/math-floor-vs-math-round-vs-parseint/55 –

答えて

33

2つの機能は実際にはかなり異なっています。

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 much so much! – Chris

3

Math.roundは、数値を最も近い整数に丸めます。

2

Math.roundが期待

number = parseInt(number); 

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

これは使用は数に入れていることを保証します:parseIntだから、あなたが必要となりますが、このようなものである値が数

であることを保証します数字の場合、parseIntには文字列が必要です。

10を基にした数字の解析にparseInt('12345', 10)を使用してください。

http://www.javascripter.net/faq/convert2.htm