JavaScriptで指定範囲内(5~10等)から整数の乱数を得る方法

先ほど初心者向けのJavaScript本を読んだのですが、そこに『■~●までの整数をランダムに表示する方法』として下記のようなコードが描かれていました。

parseInt(Math.random() * ●) + ■;

例としてだしていたのが1~6です。確かに●が1だとこれで問題ないのですが、1以外だと問題があります。例えば、●を0とすると、範囲は0~■-1になります。

正確には下記のような感じになります。

parseInt(Math.random() * (●-■+1)) + ■;

関数化して、■をmin、●をmaxとして表すと下記のようになります。

funtion getRangeRand(min, max){
    return (parseInt(Math.random() * (max-min+1)) + min);
}

parseIntの部分はMath.floorとしてもかまいません。さらにいうと括弧の位置が少し変わって、『parseInt(Math.random() * (max-min+1) + min)』ではうまくいかない時がありますが、『Math.floor(Math.random() * (max-min+1) + min)』はどんな時でも大丈夫です。どんな時というのは、指定範囲内にマイナスの値がある場合もということです。なぜかというと、parseInt(0.1)とparseInt(-0.1)は両方とも0になりますが、Math.floor(0.1)は0になり、Math.floor(-0.1)は-1になるからです(説明になってない?)。

コメント

タイトルとURLをコピーしました