有没有办法用JavaScript生成指定范围内的随机数?
例如:指定范围从1到6,随机数可以是1、2、3、4、5或6。
有没有办法用JavaScript生成指定范围内的随机数?
例如:指定范围从1到6,随机数可以是1、2、3、4、5或6。
当前回答
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);
其他回答
我写了一个更灵活的函数,它可以给你随机数,而不仅仅是整数。
function rand(min,max,interval)
{
if (typeof(interval)==='undefined') interval = 1;
var r = Math.floor(Math.random()*(max-min+interval)/interval);
return r*interval+min;
}
var a = rand(0,10); //can be 0, 1, 2 (...) 9, 10
var b = rand(4,6,0.1); //can be 4.0, 4.1, 4.2 (...) 5.9, 6.0
固定版本。
如果起始数字是1,如示例(1-6)所示,则可以使用Math.ceil()方法代替Math.floor()。
Math.ceil(Math.random() * 6)
而不是
Math.floor(Math.random() * 6) + 1
我们不要忘记其他有用的数学方法。
范围[a,b]内的加密强随机整数(假设:a<b)
let rand=(a,b)=>a+(b-a+1)*crypto.getRandomValues(新Uint32Array(1))[0]/2**32|0console.log(兰特(1,6));
或者,在Undercore
_.random(min, max)
使用可重用的随机函数。
function randomNum(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
randomNum(1, 6);