如何在 JavaScript 中的两个指定变量之间生成随机整数,例如 x = 4
和 y = 8
将输出 4, 5, 6, 7, 8
中的任何一个?
原文由 zacharyliu 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何在 JavaScript 中的两个指定变量之间生成随机整数,例如 x = 4
和 y = 8
将输出 4, 5, 6, 7, 8
中的任何一个?
原文由 zacharyliu 发布,翻译遵循 CC BY-SA 4.0 许可协议
var randomnumber = Math.floor(Math.random() * (maximum - minimum + 1)) + minimum;
原文由 Darin Dimitrov 发布,翻译遵循 CC BY-SA 2.5 许可协议
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
Mozilla 开发者网络 页面上有一些示例:
这是它背后的逻辑。这是一个简单的三法则:
Math.random()
返回一个介于 0(包括)和 1(不包括)之间的Number
。所以我们有一个这样的间隔:现在,我们想要一个介于
min
(包括)和max
(不包括)之间的数字:我们可以使用
Math.random
来获取 [min, max) 区间内的对应对象。但是,首先我们应该通过从第二个间隔中减去min
来考虑问题:这给出了:
我们现在可以应用
Math.random
然后计算对应值。让我们选择一个随机数:所以,为了找到
x
,我们会这样做:不要忘记将
min
加回去,这样我们就可以在 [min, max) 区间内得到一个数字:这是 MDN 的第一个功能。第二个,返回
min
和max
之间的整数,包括两者。现在要获取整数,您可以使用
round
、ceil
或floor
。您可以使用
Math.round(Math.random() * (max - min)) + min
,但这会产生非均匀分布。min
和max
都只有大约一半的滚动机会:将
max
从间隔中排除后,它的滚动机会甚至比min
还要小。使用
Math.floor(Math.random() * (max - min +1)) + min
你有一个完全均匀的分布。您不能在该等式中使用
ceil()
和-1
,因为max
现在滚动的机会略少,但您也可以滚动(不需要的)min-1
结果。