2

ランダムな整数の生成に関する情報が必要でした。私はそれを探してGoogleStack Overflowほとんどこのようなコードを見つけました(1から52までの数字が必要な場合):

var randInt=function(){
   number=Math.floor(Math.random()*52+1);
};

var randNumMin = 1;
var randNumMax = 52;
var randInt = function (){
   number = (Math.floor(Math.random() * (randNumMax - randNumMin + 1)) + randNumMin);
};

私はについてのいくつかの参考文献を読んで、それがからへMath.randomの数を生成していることを発見しました。を生成する場合、数値を取得するため、エラーが発生することを意味します。非常にまれなケースであることに同意しますが、可能です。そのエラーを回避するためにコードを少し変更しました(この場合はnumberの生成)。これは、JavaScriptで乱数を生成するための正しいコードだと思います。あなたの例では、整数のみを生成しますが、コードを変更して任意の種類の数値を生成することは可能だと思います。01Math.random1553

var randInt = function(){
    number = Math.floor(Math.random()*52+1);
    if (number === 53){
       randInt();
    }
};

var randNumMin = 1;
var randNumMax = 52;
var randInt = function (){
    number = (Math.floor(Math.random() * (randNumMax - randNumMin + 1)) + randNumMin);
    if (number===53){
        randInt();
    }
};
4

3 に答える 3

11

このMath.random()関数は、乱数を生成x0 <= x < 1ます。したがって、実際に近づく可能性はありますが、正確に1を生成することはありません。

のドキュメントrandomから:

0(包括的)から1(排他的)までの範囲の浮動小数点の疑似乱数を返します[0, 1)。これにより、目的の範囲にスケーリングできます。

于 2012-08-15T21:39:37.223 に答える
2

最初のコードサンプルを取得し、52から1を引きます。一般的な式は次のとおりです。

random number between X and Y = (Y - X) * Math.random() + X

または整数の場合、

Math.round((Y-X)* Math.random()+ X)

または、より正確に(@Guffaが指摘しているように)、

Math.floor((Y-(X-1)) * Math.random() + X)
于 2012-08-15T21:42:05.743 に答える
0

それは確かに結果を減らすので、あなたは床を使う必要はありません。

使用するだけround

Math.round(Math.random(51))+ 1

于 2012-08-15T21:51:43.863 に答える