指定した2つの間にある数値をランダムで返す汎用関数(使える&重要)

sample0079.htmlでは、0から9までの乱数しか得られない。
1〜6までとか120〜150までとかいった範囲を限定して、その間にある数値をランダムに得られると便利なはず。
ということで、考えたのが、このrangeRandom(num1,num2)関数。
たとえば、rangeRandom(10,20)とすれば、10〜20の間にある数値をランダムに返してくれる。
sample0079.htmlでは、Math.floor(Math.random()*10)で0〜9の乱数を求めているが、
10という数値は、実は数値の範囲の指定にすぎない。たとえば、
Math.floor(Math.random()*15)とすれば0〜14(15個)の乱数、
Math.floor(Math.random()*100)とすれば、0〜99(100個)の乱数を求められる。
さらに、Math.floor(Math.random()*10) + 5 とすれば、5〜14(10個)の乱数を求められる。
ということで、たとえば20〜50のあいだの数値をランダムに得るなら、
50-20+1を計算して31を出す。そして、Math.floor(Math.random()*31)とすると、
0〜30までの乱数が得られる。だから、Math.floor(Math.random()*31) + 20 とすると
20〜50までの乱数が得られる。という具合。一般化すれば次のようになる。

Math.floor(Math.random()*range) + min
range……2つの数値のあいだにある数値の個数
min……2つの数値のうち小さいほうの値

なお、フォームに入力した数値は文字として扱われるので、
ボディ部分ではparseInt()で入力値を数値に変換している。


実行結果

最大値 最小値 乱数

ヘッダ部分
<SCRIPT LANGUAGE="JavaScript">
//num1からnum2の間の数値をランダムに返す汎用関数
function rangeRandom(num1,num2)	{
	if((num1 - num2) > 0)	{
		var big = num1
		var small = num2
	} else	{
		var big = num2
		var small = num1
	}
	var range = big - small + 1
	var number = Math.floor(Math.random()*range) + small
	return(number)
}
</SCRIPT>

ボディ部分 <FORM NAME="form1"> 最大値 <INPUT TYPE="text" NAME="max" SIZE="5" VALUE=100> 最小値 <INPUT TYPE="text" NAME="min" SIZE="5" VALUE=0> 乱数 <INPUT TYPE="text" SIZE="5" NAME="result"> <INPUT TYPE="button" VALUE="乱数を求める" onClick="document.form1.result.value=rangeRandom(parseInt(document.form1.max.value),parseInt(document.form1.min.value))"> </FORM>