Math.floor((Math.random() * 10) + 1)是如何工作的?

3

我知道Math.floor将数字四舍五入到最低的整数,但当我们执行以下操作时: Math.random() * 10,它不会将数字乘以10,例如9 * 10 = 90,那么这个数字如何在1和10之间?

谢谢你的帮助,我已经得到答案了!

4个回答

6
Math.random()提供了一个随机数,在区间[0,1)内(浮点数:'[' = 包含, ')' = 不包含)。
因此,在Math.floor((Math.random() * 10) + 1);中,将Math.random()10相乘将提供一个在区间[0,10)内的随机数。
乘法后面的+1将会把结果转化为[1, 11)之间的数字。
最后,Math.floor( ... )将随机数从区间[1, 11)转换成一个整数值。
因此,执行语句的范围将是区间[1, 10]内的所有整数。更具体地说,它将是以下集合中的一个数字:{12345678910 }。

3
根据 MDN 的说明,Math.random()函数返回一个浮点数伪随机数,在范围[0, 1)内,即从0(包括)到1(不包括),您可以按比例缩放到所需的范围。实现选择初始种子以进行随机数生成算法;它不能由用户选择或重置。因此,Math.random()*10的最小值是0,而上限是10(不包括)。将这个表达式的结果加一得到范围在[1,11)内的数字。然后通过取Math.floor,我们获得范围内的整数[0,10],因为Math.floor() 返回给定数字小于或等于给定数字的最大整数。

1
请记住,添加的1适用于范围内的所有数字,因此它将从[1, 11)开始,经过floor后得到的整数范围将是[1, 10]。 - Patrick Barr

1
Math.random方法返回介于0(包括0)和1(不包括1)之间的随机数。这将得到0.9 * 10 = 9。

0

通过Google V8项目:

Math.random()返回一个带有正号的数字值,大于或等于0但小于1,随机或伪随机选择该范围内具有近似均匀分布的值,使用实现相关的算法或策略。此函数不接受任何参数。

Math.random使用一种称为xorshift128+的算法

阅读更多关于There's Math.random(), and then there's Math.random()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接