-2

在 Javascript 中,如何在 0 - 580 之间创建一个随机偶数乘以 20?

例如:220、360、180、0(最小)、400、200、580(最大)

4

5 回答 5

7

您需要 20 的增量,因此您真正需要的是 0 到 29 范围内的整数,然后乘以 20。示例:

var max = (580/20) + 1;
var result = 20 * (Math.floor(Math.random())*max)

我们在 上加一max,因为 Math.random() 是(包括 0)和(不包括 1)之间的均匀分布数,所以由于我们使用 Math.floor,所以最大值必须大 1。

于 2012-10-13T23:23:50.273 回答
3

这种方式创建一个随机数,然后将其向下舍入到最接近的倍数:

当你需要0 <= randomMultiple <= max

var random = Math.random() * (580 + 20);
randomMultiple = random - (random % 20);

当你需要0 <= randomMultiple < max

var random = Math.random() * 580;
randomMultiple = random - (random % 20);
于 2012-10-13T23:34:07.733 回答
1

尝试使用这个:

var result = parseInt(Math.random()*30)*20;

29*20 = 580

Math.random() 返回 [0..1)

结果在 0..580 之间,步长 20

于 2012-10-13T23:39:17.237 回答
1

使用这样的原理: 在 JavaScript 中生成两个数字之间的随机数

请记住,如果您希望最大结果为 580,那么您想要乘以 20 的最大整数将为 29(或 580/20)。然后只需添加一些逻辑以确保整数是偶数。

达达!

于 2012-10-13T23:27:37.313 回答
1

这是一个通用的 javascript one-liner,可用于任何范围和任何倍数。

本质上,我们在这里要做的是找出一个范围,从 0 到N,当乘以我们给定的倍数时,它会保持在 [0, max-min ] 范围内。

在这种情况下, N就是(max - min)/multiplerange/multiple

一旦我们有了N,我们就可以使用 Math.random() 来获得一个介于 0- N之间的随机数,并将其与倍数相乘。接下来,我们只需添加min

我们假设minmax已经是 multiple 的倍数。

注意 Math.random() 输入的额外 +1 是因为 Math.random() 返回一个介于 0(包括)和 1(包括)之间的数字。因此,Math.random() 永远不会返回 1。如果我们不考虑这一点,我们将永远无法在结果中包含最大数。

/*
 * Returns a random number within range [min,max]
 *
 * min and max must be multiples of multiple
 * (note that 0 is a multiple of all integers)
 */
function randomMultiple (min, max, multiple) {
    return Math.floor(Math.random() * (((max - min)/multiple)+1)) * multiple + min;
}

console.log(randomMultiple(0, 580, 20));

于 2018-04-26T04:38:26.453 回答