有没有办法在 JavaScript 中生成指定范围内的随机数(例如从 1 到 6:1、2、3、4、5 或 6)?
在 JavaScript 中生成两个数字之间的随机数
function randomIntFromInterval(min, max) { // min and max included
return Math.floor(Math.random() * (max - min + 1) + min)
}
const rndInt = randomIntFromInterval(1, 6)
console.log(rndInt)
它的“额外”功能是允许不以 1 开头的随机间隔。因此,例如,您可以获得 10 到 15 之间的随机数。灵活性。
重要的
以下代码仅在最小值为“1”时才有效。它不适用于除“1”以外的最小值。如果你想得到一个介于 1(并且只有 1)和 6之间的随机整数,你可以计算:
const rndInt = Math.floor(Math.random() * 6) + 1
console.log(rndInt)
在哪里:
- 1 是起始编号
- 6 是可能的结果数 (1 + start (6) - end (1) )
Math.random()
返回一个介于 min(包括)和 max(包括)之间的整数随机数:
function randomInteger(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
或min(包括)和 max(不包括)之间的任何随机数:
function randomNumber(min, max) {
return Math.random() * (max - min) + min;
}
有用的例子(整数):
// 0 -> 10
Math.floor(Math.random() * 11);
// 1 -> 10
Math.floor(Math.random() * 10) + 1;
// 5 -> 20
Math.floor(Math.random() * 16) + 5;
// -10 -> (-2)
Math.floor(Math.random() * 9) - 10;
** 总是很高兴被提醒(Mozilla):
Math.random() 不提供加密安全的随机数。不要将它们用于与安全相关的任何事情。改用 Web Crypto API,更准确地说是 window.crypto.getRandomValues() 方法。
TL; 博士
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
获取随机数
generateRandomInteger(-20, 20);
解释如下
我们需要得到一个随机整数,比如最小值和最大值之间的X。
对?
即 最小值 <= X <= 最大值
如果我们从等式中减去 min,这等价于
0 <= (X - min) <= (max - min)
现在,让我们将其乘以一个随机数r ,即
0 <= (X - min) * r <= (max - min) * r
现在,让我们在等式中重新添加min
min <= min + (X - min) * r <= min + (max - min) * r
现在,让我们选择一个导致r的函数,使其满足我们的方程范围 [min,max]。这仅在0<= r <=1 时才有可能
好的。现在,r的范围即 [0,1] 与 Math.random() 函数结果非常相似。不是吗?
Math.random() 函数返回 [0, 1) 范围内的浮点伪随机数;即,从 0(含)到但不包括 1(不含)
例如,
案例 r = 0
min
+ 0 * ( max
- min
) =分钟
案例 r = 1
min
+ 1 * ( max
- min
) =最大值
使用 Math.random 0 <= r < 1 的随机案例
min
+ r * ( max
- min
) = X,其中X 的范围为min <= X < max
上面的结果X是一个随机数字。然而,由于 Math.random() 我们的左边界是包含的,而右边界是不包括的。为了包括我们的右边界,我们将右边界增加 1 并对结果进行取底。
function generateRandomInteger(min, max) {
return Math.floor(min + Math.random()*(max + 1 - min))
}
获取随机数
generateRandomInteger(-20, 20)
;