JavaScriptで整数のみの乱数を作る方法と注意点

JavaScriptのrandom関数は浮動少数点の乱数を返してきます。

なので整数のみの乱数を作ろうとした場合は少しだけ工夫が必要

ここではそのテクニックについてコード例と一緒に紹介したいと思います。

Math.randomについておさらい

まず Math.random は0以上1未満の乱数を発生させるメソッドのこと

使い方や乱数の範囲指定、応用テクニックについては次でまとめた通りです。

 

それで任意の範囲の乱数を発生させたい場合、計算が必要です。

例えば2以上5未満の範囲で乱数を発生させるなら次の式を書けばOK

この式で問題なのは少数も乱数に含まれてしまうということ

つまりこの式が返す値は 2.43  とか 4.28  とか整数以外も含まれてしまいます。

というか 2  とか 4  とかの整数が返ってくる方が珍しいかもしれません。

 

こういう訳で普通に範囲指定すると整数以外も含まれます。

ですが少しだけ工夫すれば整数だけの乱数を作ることも可能です。

整数だけの乱数を作るにはfloor関数を使えばOK

任意の範囲で整数だけの乱数を作りたい・・・

その場合はMath.floorメソッドを使えば簡単に作れます。

 

この Math.floor  は渡した数以下の最大の整数を返すメソッド

例えば次のように 3.14  を渡したとします。

この場合変数 x  に入る値は 3  なので切り下げられるという訳です。

 

それでこの Math.floor  を乱数発生の式に組み込めば整数のみの乱数が作れます。

乱数の最小値を min  、最大値を max  とすると次のような計算式

これで min  以上 max  未満の整数値のみの乱数が返ってきます。

 

そして以下は整数のみの乱数を発生させているコード例

一番最後の例のように0が最小値の場合は省略してもOKです。

 

以上が整数のみを含む乱数を発生させる方法

配列の要素にランダムにアクセスしたい場合とかに役立ちそうですね。

整数のみの乱数を発生させるときの注意点

整数のみの乱数を作る場合は1つ注意しないといけないことがあります。

それは範囲右端の値は乱数には含まれないということ

 

例えば2~5までの整数乱数を作るコード例で考えてみましょう。

このとき乱数の発生する範囲は2以上から5未満まで

5未満なので5は含まれていないというのが要注意ポイントです。

 

なので右端の値も含みたいときは乱数の発生式に1足す必要があります。

つまり乱数の最小値を min  、最大値を max  とすると次のような式

これで min  以上 max  以下の乱数が得られるようになります。

 

以下は右端の値も含む乱数のコード例

右の値を含めるにはrandom関数にかける値に +1  するのを忘れずに

ここまでのまとめ

ということで整数乱数を発生させる方法まとめ

  • floor関数を使う
    乱数の最小値を min  、最大値を max  として

    このように書くと min  以上 max  未満の乱数が返ってくる
  • 右端も含めるには1足す
    右端も含めるには乱数の最小値を min  、最大値を max  として

    このようにrandom関数にかける値に +1  する必要があることに要注意!

基本的にはfloor関数で値を整数に繰り下げてあげればいいだけです。

ただし右端の値は含まれないので含ませるには +1  することが必要

以上JavaScriptで整数のみの乱数を発生させる方法についてでした。

Shareこの記事をシェアしよう!

Commentsこの記事についたコメント

2件のコメント
  • 誤り

    0以上9以下の整数乱数のところは
    0以上9未満の整数乱数の間違いではないですか

    Math.floor(Math.random() * 1) は常に0になります
    そこから数えていけば

    6月 4, 2020 10:04 am
    • ぴー助

      コメントありがとうございます!
      この記事の次のコードのことですよね?

      これは間違いなく0以上9以下になります。
      まずMath.random()は 0 <= n < 1 までの範囲、 それに10をかければ 0 <= n < 10 までの範囲。 それをMath.floor() すれば 0 <= n <= 9 の範囲です。 Math.floor()の引数は 9.54 とか 9.12 などになりえます。 ちなみに以下コードで9が発生することも確認可能。

      もし間違いなどあればご指摘ください。

      6月 4, 2020 12:25 pm

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください