问题描述
刚刚开始学习循环,我在理解let值中的操作顺序以及在这种情况下random()的工作方式上遇到了困难。
从看起来像:Math.floor()防止小数,而Math.random()选择0到36之间的随机数。random()是否为MAX和MIN选择随机值?
> random()是否还会为其自身生成一个随机数,将其乘以减去后的MAX和MIN等于什么,然后将MIN加回去?const MIN = 0;
const MAX = 36;
var testNumber = 15;
var i = 1;
while (MAX) {
let randomValue = Math.floor(Math.random() * (MAX - MIN)) + MIN;
if (randomValue == testNumber) {
break;
}
解决方法
Math.random()提供一个介于0到1之间的随机浮点数。如果要获得更大范围的随机值,请乘以所需范围的大小(即MAX-MIN)。然后,如果MIN大于0,则需要将其添加到结果随机数中,否则结果范围将是0,直至(MAX-MIN)。
正如您所说,Math.floor()只是将结果四舍五入到最接近的整数。
, Math.floor()
函数返回小于或等于给定数字的最大整数。这与Math.ceil()
函数相反,该函数返回大于或等于给定数字的最大整数。
Math.random()
函数返回一个浮点伪随机数,范围在0到小于1(包括0,但不包括1)之间,并且在该范围内具有大致均匀的分布-然后您就可以缩放到您想要的范围。
因此,对于您的randomValue
变量,将在MIN和MAX的值之间生成一个伪随机值。由于Math.random()
的工作方式,该值可能带有小数,因此Math.floor
用于获取整数。在末尾加上MIN,以便随机值始终落在该范围内,尤其是如果MIN不为0时。