JavaScriptのrandom関数は浮動少数点の乱数を返してきます。
なので整数のみの乱数を作ろうとした場合は少しだけ工夫が必要
ここではそのテクニックについてコード例と一緒に紹介したいと思います。
Math.randomについておさらい
まず Math.random は0以上1未満の乱数を発生させるメソッドのこと
使い方や乱数の範囲指定、応用テクニックについては次でまとめた通りです。
それで任意の範囲の乱数を発生させたい場合、計算が必要です。
例えば2以上5未満の範囲で乱数を発生させるなら次の式を書けばOK
1 |
Math.random() * (5 - 2) + 2; |
この式で問題なのは少数も乱数に含まれてしまうということ
つまりこの式が返す値は 2.43 とか 4.28 とか整数以外も含まれてしまいます。
というか 2 とか 4 とかの整数が返ってくる方が珍しいかもしれません。
こういう訳で普通に範囲指定すると整数以外も含まれます。
ですが少しだけ工夫すれば整数だけの乱数を作ることも可能です。
整数だけの乱数を作るにはfloor関数を使えばOK
任意の範囲で整数だけの乱数を作りたい・・・
その場合はMath.floorメソッドを使えば簡単に作れます。
この Math.floor は渡した数以下の最大の整数を返すメソッド
例えば次のように 3.14 を渡したとします。
1 |
var x = Math.floor(3.14); |
この場合変数 x に入る値は 3 なので切り下げられるという訳です。
それでこの Math.floor を乱数発生の式に組み込めば整数のみの乱数が作れます。
乱数の最小値を min 、最大値を max とすると次のような計算式
1 |
Math.floor(Math.random() * (max - min)) + min |
これで min 以上 max 未満の整数値のみの乱数が返ってきます。
そして以下は整数のみの乱数を発生させているコード例
1 2 |
/** 2 ~ 5までの整数乱数 */ var x = Math.floor(Math.random() * (5 - 2)) + 2; |
1 2 |
/** 21 ~ 29までの整数乱数 */ var x = Math.floor(Math.random() * (29 - 21)) + 21; |
1 2 |
/** 100 ~ 199までの整数乱数 */ var x = Math.floor(Math.random() * (199 - 100)) + 100; |
1 2 |
/** 0 ~ 9までの整数乱数 */ var x = Math.floor(Math.random() * 9); |
一番最後の例のように0が最小値の場合は省略してもOKです。
以上が整数のみを含む乱数を発生させる方法
配列の要素にランダムにアクセスしたい場合とかに役立ちそうですね。
整数のみの乱数を発生させるときの注意点
整数のみの乱数を作る場合は1つ注意しないといけないことがあります。
それは範囲右端の値は乱数には含まれないということ
例えば2~5までの整数乱数を作るコード例で考えてみましょう。
1 |
var rand = Math.floor(Math.random() * (5 - 2)) + 2; |
このとき乱数の発生する範囲は2以上から5未満まで
5未満なので5は含まれていないというのが要注意ポイントです。
なので右端の値も含みたいときは乱数の発生式に1足す必要があります。
つまり乱数の最小値を min 、最大値を max とすると次のような式
1 |
Math.floor(Math.random() * (max - min + 1)) + min |
これで min 以上 max 以下の乱数が得られるようになります。
以下は右端の値も含む乱数のコード例
1 2 |
/** 5以上9以下の整数乱数 */ var rand = Math.floor(Math.random() * (9 - 5 + 1)) + 5; |
1 2 |
/** 10以上99以下の整数乱数 */ var rand = Math.floor(Math.random() * (99 - 10 + 1)) + 10; |
1 2 |
/** 0以上9以下の整数乱数 */ var rand = Math.floor(Math.random() * (9 + 1)); |
右の値を含めるにはrandom関数にかける値に +1 するのを忘れずに
ここまでのまとめ
ということで整数乱数を発生させる方法まとめ
- floor関数を使う
乱数の最小値を min 、最大値を max として
1Math.floor(Math.random() * (max - min)) + min
このように書くと min 以上 max 未満の乱数が返ってくる - 右端も含めるには1足す
右端も含めるには乱数の最小値を min 、最大値を max として
1Math.floor(Math.random() * (max - min + 1)) + min
このようにrandom関数にかける値に +1 する必要があることに要注意!
基本的にはfloor関数で値を整数に繰り下げてあげればいいだけです。
ただし右端の値は含まれないので含ませるには +1 することが必要
以上JavaScriptで整数のみの乱数を発生させる方法についてでした。