Javascript Math.floor(Math.random()*5+;1)的概念,真正的范围是什么,为什么?

Javascript Math.floor(Math.random()*5+;1)的概念,真正的范围是什么,为什么?,javascript,math,Javascript,Math,通过将随机数(介于0和1之间)乘以5,我们使其成为介于0和5之间的随机数(例如,3.1841)。Math.floor()将该数字向下舍入为整数,并在末尾添加1将范围从0到4更改为1到5(最多5个,包括5个) 上面的解释把我弄糊涂了。。。我的解释如下: --加上5可以得到5个数字的范围 --但它以0开头(像数组一样?) --所以技术上是0-4 --加上1,你就得到了1-5 我对JS很陌生,甚至不知道这种问题在这里是否合适,但到目前为止,这个网站非常棒。谢谢你的帮助 Math.Random()返回一

通过将随机数(介于0和1之间)乘以5,我们使其成为介于0和5之间的随机数(例如,3.1841)。Math.floor()将该数字向下舍入为整数,并在末尾添加1将范围从0到4更改为1到5(最多5个,包括5个)

上面的解释把我弄糊涂了。。。我的解释如下:

--加上5可以得到5个数字的范围 --但它以0开头(像数组一样?) --所以技术上是0-4 --加上1,你就得到了1-5

我对JS很陌生,甚至不知道这种问题在这里是否合适,但到目前为止,这个网站非常棒。谢谢你的帮助

Math.Random()返回一个介于0和1之间的数字,不包括1

所以当你把它乘以5,你得到一个介于0和5之间的数字,但不是5

此数字上的Math.floor()向下舍入为整数

因此,您将得到的数字是0、1、2、3或4

将1添加到该范围会得到一个[1、2、3、4、5]中的数字。

来自
Math.random()

函数的作用是:返回[0,1]范围内的浮点伪随机数,即从0(包括0)到1(不包括1)(排除)

以下是两个随机生成的数字示例:

Math.random() // 0.011153860716149211
Math.random() // 0.9729151880834252
因此,当我们将随机生成的数字与另一个数字相乘时,它的范围将从0到比所乘数字小1的最大值(因为
Math.floor()
只是删除小数位数,而不是将数字四舍五入(也就是说,当使用
Math.floor()
处理时,0.999变为0,而不是1))

添加一个简单地将其抵消为您所追求的值:

Math.floor(0.011153860716149211 * 5) + 1 // 1
Math.floor(0.9729151880834252 * 5) + 1   // 5
请注意:

  • 0

    使用依赖于实现的算法或策略,返回带正号、大于或等于0但小于1、随机或伪随机选择、在该范围内近似均匀分布的数值。此函数不带任何参数

    所以


    我看到一些答案说0在规范中的rand函数中是独占的:random()返回一个带正号的双精度值,大于或等于0.0,小于1.0。@Culyx这是一个JavaScript问题,不是Java!@BlackSheep我的道歉抓取了错误的链接,检查了这两个=P,但这一点仍然有效:random()方法返回从0(包含)到但不包括1(独占)的随机数。
    Math.floor(0.011153860716149211 * 5) + 1 // 1
    Math.floor(0.9729151880834252 * 5) + 1   // 5
    
    x = Math.floor((0..0.999999999) * 5 + 1)
    x = (0..4) + 1
    
    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}