2

我想要一些关于生成随机整数的信息。我在里面寻找它,Google并且Stack 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,发现它正在生成从0to的数字1。如果Math.randomgenerate 1,我们会得到 number 5,所以这意味着我们会得到错误。我同意这是非常罕见的情况,但这是可能的。我稍微修改了代码以避免该错误(在我们的例子中生成 number 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();
    }
};
4

3 回答 3

11

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

文档中random

返回范围内的浮点伪随机数,[0, 1)即从 0(包括)到但不包括 1(不包括),然后您可以将其缩放到所需的范围。

于 2012-08-15T21:39:37.223 回答
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)
于 2012-08-15T21:42:05.743 回答
0

您不需要使用地板,因为它确实会降低结果。

只需使用round

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

于 2012-08-15T21:51:43.863 回答