gpt4 book ai didi

javascript - 在 JavaScript 中生成特定范围内的随机整数

转载 作者:行者123 更新时间:2023-11-28 06:31:34 25 4
gpt4 key购买 nike

如何在 JavaScript 中生成两个指定变量之间的随机整数,例如x = 4y = 8 会输出 4, 5, 6, 7, 8 中的任何一个?

最佳答案

Mozilla Developer Network 上有一些示例页面:

/**
* Returns a random number between min (inclusive) and max (exclusive)
*/
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}

/**
* Returns a random integer between min (inclusive) and max (inclusive).
* The value is no lower than min (or the next integer greater than min
* if min isn't an integer) and no greater than max (or the next integer
* lower than max if max isn't an integer).
* Using Math.round() will give you a non-uniform distribution!
*/
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
<小时/>

这是其背后的逻辑。这是一个简单的三条规则:

Math.random() 返回一个介于 0(含)和 1(不含)之间的 Number。所以我们有这样的间隔:

[0 .................................... 1)

现在,我们想要一个介于 min(含)和 max(不含)之间的数字:

[0 .................................... 1)
[min .................................. max)

我们可以使用Math.random来获取[min, max)区间内的对应值。但是,首先我们应该通过从第二个间隔中减去 min 来稍微考虑一下问题:

[0 .................................... 1)
[min - min ............................ max - min)

这给出:

[0 .................................... 1)
[0 .................................... max - min)

我们现在可以应用Math.random然后计算相应的值。让我们选择一个随机数:

                Math.random()
|
[0 .................................... 1)
[0 .................................... max - min)
|
x (what we need)

因此,为了找到x,我们会这样做:

x = Math.random() * (max - min);

不要忘记添加 min 回来,这样我们就可以得到 [min, max) 区间内的数字:

x = Math.random() * (max - min) + min;

这是 MDN 的第一个功能。第二个返回 minmax 之间的整数(包含两者)。

现在要获取整数,您可以使用 roundceilfloor

您可以使用Math.round(Math.random() * (max - min)) + min,但这会产生非均匀分布。 minmax 都只有大约一半的机会滚动:

min...min+0.5...min+1...min+1.5   ...    max-0.5....max
└───┬───┘└────────┬───────┘└───── ... ─────┘└───┬──┘ ← Math.round()
min min+1 max

max 排除在间隔之外后,它滚动的机会甚至比 min 还要小。

使用Math.floor(Math.random() * (max - min +1)) + min,您将获得完美均匀的分布。

 min...  min+1...    ...      max-1... max....   (max+1 is excluded from interval)
└───┬───┘└───┬───┘└─── ... ┘└───┬───┘└───┬───┘ ← Math.floor()
min min+1 max-1 max

您不能在该等式中使用ceil()-1,因为max现在滚动的机会稍少,但是您也可以滚动(不需要的)min-1 结果。

关于javascript - 在 JavaScript 中生成特定范围内的随机整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34671644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com