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

时间:2014-01-31 15:27:24

标签: javascript math

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

上面的解释使我感到困惑......我的解释如下:

- 添加5给它一个5个数字的范围 - 但它从0开始(像一个数组?) - 技术上是0 - 4 - 并通过添加一个,你使它1 - 5

我是JS的新手,甚至不知道这类问题是否合适,但到目前为止这个网站一直很棒。谢谢你的帮助!

4 个答案:

答案 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}