有没有办法用JavaScript生成指定范围内的随机数?

例如:指定范围从1到6,随机数可以是1、2、3、4、5或6。


当前回答

如果起始数字是1,如示例(1-6)所示,则可以使用Math.ceil()方法代替Math.floor()。

Math.ceil(Math.random() * 6)

而不是

Math.floor(Math.random() * 6) + 1

我们不要忘记其他有用的数学方法。

其他回答

我发现了一种使用ES6默认参数实现这一点的新方法。它非常漂亮,因为它允许一个参数或两个参数。这里是:

function random(n, b = 0) {
    return Math.random() * (b-n) + n;
}

使用可重用的随机函数。

function randomNum(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
randomNum(1, 6);

函数randomIntFromInterval(min,max){//包括min和maxreturn Math.floor(Math.random()*(max-min+1)+min)}常量rndInt=随机IntFromInterval(1,6)控制台日志(rndInt)

它的“额外”之处在于它允许不以1开头的随机间隔。例如,你可以得到一个从10到15的随机数。灵活性

TL;博士

function generateRandomInteger(min, max) {
  return Math.floor(min + Math.random()*(max - min + 1))
}

要获得随机数generateRandomInteger(-20,20);

下面的解释

整数-不是分数的数字;整数

我们需要得到一个随机数,比如最小值和最大值之间的X。十、 min和max都是整数

即最小<=X<=最大

如果我们从方程中减去min,这相当于

0<=(X-最小)<=(最大-最小)

现在,让我们将其与随机数r相乘这是

0<=(X-分钟)*r<=(最大-分钟)*r

现在,让我们把min加回到等式中

最小<=最小+(X-最小)*r<=最小值+(最大-最小)*r

对于任何给定的X,只有当r的范围为[0,1]时,上述方程才满足。对于r的任何其他值,上述方程都不满足。

在此处了解范围[x,y]或(x,y)的更多信息

我们的下一步是找到一个函数,该函数总是产生范围为[0,1]的值

现在,r的范围,即[0,1]与Javascript中的Math.random()函数非常相似。不是吗?

函数的作用是:返回浮点伪随机范围[0,1)内的数字;即从0(含0)到但不包括1(不含)

使用Math.Random()的随机函数0<=r<1

注意,在Math.random()中,左边界是包含的,右边界是排他的。这意味着min+(max-min)*r的取值范围为[min,max)

为了包括我们的右边界,即[min,max],我们将右边界增加1,并将结果下限。

function generateRandomInteger(min, max) {
  return Math.floor(min + Math.random()*(max - min + 1))
}

要获得随机数

generateRandomInteger(-20,20);

var x = 6; // can be any number
var rand = Math.floor(Math.random()*x) + 1;