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

Generating random whole numbers in JavaScript in a specific range?(在特定范围内的 JavaScript 中生成随机整数?)

本文介绍了在特定范围内的 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 中生成随机整数?