在 Javascript 中,如何在 0 - 580 之间创建一个随机偶数乘以 20?
例如:220、360、180、0(最小)、400、200、580(最大)
在 Javascript 中,如何在 0 - 580 之间创建一个随机偶数乘以 20?
例如:220、360、180、0(最小)、400、200、580(最大)
您需要 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。
这种方式创建一个随机数,然后将其向下舍入到最接近的倍数:
当你需要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);
尝试使用这个:
var result = parseInt(Math.random()*30)*20;
29*20 = 580
Math.random() 返回 [0..1)
结果在 0..580 之间,步长 20
使用这样的原理: 在 JavaScript 中生成两个数字之间的随机数
请记住,如果您希望最大结果为 580,那么您想要乘以 20 的最大整数将为 29(或 580/20)。然后只需添加一些逻辑以确保整数是偶数。
达达!
这是一个通用的 javascript one-liner,可用于任何范围和任何倍数。
本质上,我们在这里要做的是找出一个范围,从 0 到N,当乘以我们给定的倍数时,它会保持在 [0, max-min ] 范围内。
在这种情况下, N就是(max - min)/multiple或range/multiple。
一旦我们有了N,我们就可以使用 Math.random() 来获得一个介于 0- N之间的随机数,并将其与倍数相乘。接下来,我们只需添加min。
我们假设min和max已经是 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));