通过将随机数(介于0和1之间)乘以5,我们使其成为0到5之间的随机数(例如,3.1841)。 Math.floor()将此数字向下舍入为整数,并在末尾添加1将范围从0到4更改为1到5之间(最多包括5)。
上面的解释使我感到困惑......我的解释如下:
- 添加5给它一个5个数字的范围 - 但它从0开始(像一个数组?) - 技术上是0 - 4 - 并通过添加一个,你使它1 - 5
我是JS的新手,甚至不知道这类问题是否合适,但到目前为止这个网站一直很棒。谢谢你的帮助!
答案 0 :(得分:6)
来自Math.random()
上的Mozilla Developer Networks' documentation:
Math.random()函数返回[0,1]范围内的浮点伪随机数,从0(包括)到最大但不包括1(不包括)。
以下是两个随机生成的数字示例:
Math.random() // 0.011153860716149211
Math.random() // 0.9729151880834252
因此,当我们将随机生成的数字乘以另一个数字时,它的范围从0到最大值1,低于乘以的数字(因为Math.floor()
只是删除小数位而不是舍入数字(也就是说,0.999在使用Math.floor()
处理时变为0,不是 1))。
Math.floor(0.011153860716149211 * 5) // 0
Math.floor(0.9729151880834252 * 5) // 4
添加一个只是将其偏移到您所追求的值:
Math.floor(0.011153860716149211 * 5) + 1 // 1
Math.floor(0.9729151880834252 * 5) + 1 // 5
答案 1 :(得分:2)
Math.Random()返回0到1之间的数字,不包括1.
因此,当你将它乘以5时,你得到的数字介于0和5之间,但不是5。
这个数字的Math.floor()向下舍入到整数。
你得到的数字是0,1,2,3或4.
在此范围内添加1会为您提供[1,2,3,4,5]中的数字。
答案 2 :(得分:0)
请注意:
0 <= Math.random() **<** 1
Math.floor(x.yz) = x
因此,给定的数字是区间中的整数:
x = Math.floor((0..0.999999999) * 5 + 1)
x = (0..4) + 1
答案 3 :(得分:0)
15.8.2.14 Math.random from the ES5 spec,
使用依赖于实现的算法或策略,返回具有正号,大于或等于0但小于1的Number值,随机或伪随机选择,在该范围内具有近似均匀的分布。这个函数不带参数。
所以,
x = Math.random(); // 0 ≤ x < 1
y = x * 5; // 0 ≤ y < 5
z = y + 1; // 1 ≤ z < 6
i = Math.floor(z); // 1 ≤ i ≤ 5, i ∈ ℤ, ℤ integers
这意味着
i ∈ {1, 2, 3, 4, 5}