ホームページ >ウェブフロントエンド >jsチュートリアル >javascript_javascriptスキルで乱数を生成する方法のまとめ
今日、別のネチズンが、JavaScript を使用して指定された範囲で乱数を生成する方法を私に尋ねました。 Math.random() が乱数を生成するために使用されるメソッドであることは誰もが知っていると思います。ただし、一般的なリファレンス マニュアルでは、この方法を使用して指定された範囲内の乱数を生成する方法については説明されていません。今回はMath.random()の詳細と、それを使って指定範囲内の乱数を生成する方法を紹介します。
基本的なチュートリアルについては、こちらを参照してください
http://www.jb51.net/w3school/js/jsref_random.htm
チュートリアルを読んだ後は、Math.random() メソッドの基本的な使用法を理解できるはずです。
丸めには parseInt()、Math.floor()、または Math.ceil() を使用します
Math.random() メソッドを使用すると、1 未満の数値が直接生成されることがわかります。
Math.random()*5
得られた結果は 5 未満の乱数です。通常、取得したいのは 0 ~ 5 の整数であるため、期待する整数を取得するには結果を四捨五入する必要があります。 parseInt()、Math.floor()、および Math.ceil() はすべて丸めの役割を果たすことができます。
var randomNum = Math.random()*5; alert(randomNum); // 2.9045290905811183 alert(parseInt(randomNum,10)); // 2 alert(Math.floor(randomNum)); // 2 alert(Math.ceil(randomNum)); // 3
テストされたコードから、parseInt() と Math.floor() は同じ効果を持ち、どちらも整数部分を下方に取り出すことがわかります。したがって、 parseInt(Math.random()*5,10) と Math.floor(Math.random()*5) はどちらも 0 ~ 4 の範囲で生成された乱数であり、 Math.ceil(Math.random()*5 ) は1 ~ 5 の範囲で乱数を生成します。
指定された範囲内の乱数を生成します
したがって、1 から任意の値までの乱数を生成したい場合、式は次のようになります:
// max - 期望的最大值 parseInt(Math.random()*max,10)+1; Math.floor(Math.random()*max)+1; Math.ceil(Math.random()*max);
0 から任意の値までの乱数を生成したい場合、式は次のようになります:
// max - 期望的最大值 parseInt(Math.random()*(max+1),10); Math.floor(Math.random()*(max+1));
任意の値から任意の値までの乱数を生成したい場合、式は次のようになります:
// max - 期望的最大值 // min - 期望的最小值 parseInt(Math.random()*(max-min+1)+min,10); Math.floor(Math.random()*(max-min+1)+min);
JavaScript を使用して乱数を生成する他の方法を見てみましょう
1. 組み込みの乱数生成メソッドを使用します: (先ほど述べた、簡単な説明です)
Math.random(); //该方法产生一个0到1之间的浮点数。 Math.floor(Math.random()*10+1); //1-10 Math.floor(Math.random()*24);//0-23
2. 時間に基づいて乱数を生成することもできます:
var number = now.getSeconds()C; // 現在の時刻に基づいて 0 ~ 42 の整数を生成します。
<script language="JavaScript"><!-- // The Central Randomizer 1.3 (C) 1997 by Paul Houle (houle@msc.cornell.edu) // See: http://www.msc.cornell.edu/~houle/javascript/randomizer.html rnd.today=new Date(); rnd.seed=rnd.today.getTime(); function rnd() { rnd.seed = (rnd.seed*9301+49297) % 233280; return rnd.seed/(233280.0); }; function rand(number) { return Math.ceil(rnd()*number); }; // end central randomizer. --> </script>
最初のメソッドは Math.random メソッドを書き換えることによって実装され、2 番目のメソッドは C 実装から変更されており、どちらもプログラミングの目的を達成できます。
例 1:
<script language="javascript"> var native_random = Math.random; Math.random = function(min, max, exact) { if (arguments.length === 0) { return native_random(); } else if (arguments.length === 1) { max = min; min = 0; } var range = min + (native_random()*(max - min)); return exact === void(0) ? Math.round(range) : range.toFixed(exact); }; document.write(Math.random()); document.write('<br />'); document.write(Math.random(10)); document.write('<br />'); document.write(Math.random(3,10)); document.write('<br />'); document.write(Math.random(2,10,4)); </script>
<script type="text/javascript"> var random = (function(){ var high = 1, low = 1 ^ 0x49616E42; var shuffle = function(seed){ high = seed; low = seed ^ 0x49616E42; } return function(){ var a = new Date()-0 shuffle(a); high = (high << 16) + (high >> 16); high += low; low += high; return high; } })(); alert( random() ); </script>