关于生成随机数的几点思考

时间:2012-08-15 21:38:08

标签: javascript random

我研究JavaScript并想要了解有关生成随机整数的一些信息。我在googlestackoverflow中查找它,并且大多数代码都是这样的(如果我们想要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的引用,发现它正在生成从01的数字。如果Math.random生成1,我们会得到数字5,这意味着我们会收到错误。我同意这是非常罕见的情况,但它是可能的。我略微修改了代码以避免该错误(在我们的例子中生成数字53)。在这里,我认为是JavaScript中生成随机数的正确代码。在您的示例中,它只生成整数,但我认为可以修改代码并生成任何类型的数字:

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();
    }
};

我是JavaScript的新手,听听JavaScript专业人士的一些想法会很有趣。提前谢谢。

3 个答案:

答案 0 :(得分:11)

Math.random()函数生成随机数x,其中0 <= x < 1。所以它永远不会生成完全 1,尽管它可能非常接近。

来自the documentation for random

  

返回[0, 1)范围内的浮点伪随机数,从0(包括)到最大但不包括1(不包括),然后可以缩放到所需范围。< / p>

答案 1 :(得分:2)

只需取你的第一个代码示例,然后从52中减去一个。通用公式为:

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)

答案 2 :(得分:0)

你不需要使用地板,因为它会减少结果。

只需使用round

Math.round(的Math.random(51))+ 1P>