Generating random whole numbers in JavaScript in a specific range?(在特定范围内的 JavaScript 中生成随机整数?)
问题描述
如何在 JavaScript 中的两个指定变量之间生成随机整数,例如x = 4 和 y = 8 会输出任何 4, 5, 6, 7, 8?
How can I generate random whole numbers between two specified variables in JavaScript, e.g. x = 4 and y = 8 would output any of 4, 5, 6, 7, 8?
推荐答案
Mozilla 开发者网络 页面:
/**
* 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;
}
<小时>
这是它背后的逻辑.这是一个简单的三法则:
Here's the logic behind it. It's a simple rule of three:
Math.random() 返回一个介于 0(包括)和 1(不包括)之间的 Number.所以我们有一个这样的区间:
Math.random() returns a Number between 0 (inclusive) and 1 (exclusive). So we have an interval like this:
[0 .................................... 1)
现在,我们想要一个介于 min(包括)和 max(不包括)之间的数字:
Now, we'd like a number between min (inclusive) and max (exclusive):
[0 .................................... 1)
[min .................................. max)
我们可以使用 Math.random 来获取 [min, max) 区间内的对应者.但是,首先我们应该通过从第二个间隔中减去 min 来考虑问题:
We can use the Math.random to get the correspondent in the [min, max) interval. But, first we should factor a little bit the problem by subtracting min from the second interval:
[0 .................................... 1)
[min - min ............................ max - min)
这给出了:
[0 .................................... 1)
[0 .................................... max - min)
我们现在可以应用 Math.random 然后计算对应值.让我们选择一个随机数:
We may now apply Math.random and then calculate the correspondent. Let's choose a random number:
Math.random()
|
[0 .................................... 1)
[0 .................................... max - min)
|
x (what we need)
所以,为了找到 x,我们会这样做:
So, in order to find x, we would do:
x = Math.random() * (max - min);
别忘了把min加回来,这样我们就可以得到一个在[min, max)区间内的数字:
Don't forget to add min back, so that we get a number in the [min, max) interval:
x = Math.random() * (max - min) + min;
这是 MDN 的第一个功能.第二个,返回 min 和 max 之间的整数,两者都包含.
That was the first function from MDN. The second one, returns an integer between min and max, both inclusive.
现在要获取整数,您可以使用 round、ceil 或 floor.
Now for getting integers, you could use round, ceil or floor.
您可以使用 Math.round(Math.random() * (max - min)) + min,但这会产生非均匀分布.min 和 max 都只有大约一半的滚动机会:
You could use Math.round(Math.random() * (max - min)) + min, this however gives a non-even distribution. Both, min and max only have approximately half the chance to roll:
min...min+0.5...min+1...min+1.5 ... max-0.5....max
└───┬───┘└────────┬───────┘└───── ... ─────┘└───┬──┘ ← Math.round()
min min+1 max
将max排除在区间之外,滚动的机会比min还要小.
With max excluded from the interval, it has an even less chance to roll than min.
使用 Math.floor(Math.random() * (max - min +1)) + min 你有一个完全均匀的分布.
With Math.floor(Math.random() * (max - min +1)) + min you have a perfectly even distribution.
min.... min+1... min+2 ... max-1... max.... max+1 (is excluded from interval)
| | | | | |
└───┬───┘└───┬───┘└─── ... ┘└───┬───┘└───┬───┘ ← Math.floor()
min min+1 max-1 max
您不能在该等式中使用 ceil() 和 -1 因为 max 现在滚动的机会略少,但是您也可以滚动(不需要的)min-1 结果.
You can't use ceil() and -1 in that equation because max now had a slightly less chance to roll, but you can roll the (unwanted) min-1 result too.
这篇关于在特定范围内的 JavaScript 中生成随机整数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在特定范围内的 JavaScript 中生成随机整数?
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
