有没有办法用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);
其他回答
jsfiddle:https://jsfiddle.net/cyGwf/477/
随机整数:要获得最小值和最大值之间的随机整数,请使用以下代码
function getRandomInteger(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min;
}
随机浮点数:要获得最小值和最大值之间的随机浮点数,请使用以下代码
function getRandomFloat(min, max) {
return Math.random() * (max - min) + min;
}
参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
获取0到400之间的随机整数
let rand=数学舍入(Math.random()*400)document.write(兰特)
获取200到1500之间的随机整数
让范围={min:200,max:1500}设delta=范围.max-范围.minconst rand=数学舍入(range.min+Math.random()*delta)document.write(兰特)
使用函数
函数randBetween(最小值,最大值){设delta=最大值-最小值return Math.round(min+Math.random()*delta)}document.write(randBetween(10,15));
//JavaScript ES6箭头函数常量randBetween=(最小值,最大值)=>{设delta=最大值-最小值return Math.round(min+Math.random()*delta)}document.write(randBetween(10,20))
函数randomIntFromInterval(min,max){//包括min和maxreturn Math.floor(Math.random()*(max-min+1)+min)}常量rndInt=随机IntFromInterval(1,6)控制台日志(rndInt)
它的“额外”之处在于它允许不以1开头的随机间隔。例如,你可以得到一个从10到15的随机数。灵活性
范围[a,b]内的加密强随机整数(假设:a<b)
let rand=(a,b)=>a+(b-a+1)*crypto.getRandomValues(新Uint32Array(1))[0]/2**32|0console.log(兰特(1,6));
我发现了一种使用ES6默认参数实现这一点的新方法。它非常漂亮,因为它允许一个参数或两个参数。这里是:
function random(n, b = 0) {
return Math.random() * (b-n) + n;
}