我正在使用此函数生成1000到100之间的随机数。 但是根据我的说法,这里是(max-min)+ min,max- min = 900和min = 100,因此它不应该生成900到100之间的数字吗?但是它返回的数字大于900又如何呢?我很困惑。并告诉我如何检查随机函数生成的数字范围?有什么帮助吗?
x = Math.floor(Math.random() * (1000 - 100) + 100);
console.log(x);
答案 0 :(得分:1)
随机数Math.random() * (max - min) + min
的公式是在min
和max
之间获得均匀分布的数字的正确公式。
max - min
将为您提供生成随机数的范围。因此,在这种情况下,1000 - 100
的范围为900
。
乘以Math.random()
将为您提供范围内的随机数。因此,Math.random()
乘以0.5
后得到450
。
最后,将min
添加到随机选择中可确保您获得的数字在min
和max
的范围内。
例如,Math.random()
产生0.01
,如果我们替换公式,则得到0.01 * (1000 - 100) = 9
,它在下方 min
。相反,如果Math.random()
产生1
,则1 * (1000 - 100) = 900
是可能从该范围获得的最高随机数,但仍低于max
。在两种情况下,都将min
添加到结果中可确保您获得的随机数在max
和min
答案 1 :(得分:0)
乘以(1000 -200),因为您已经有+100
因为如果生成的随机数大于800
,那么每次添加100
时结束的范围都会超出范围
x = Math.floor(Math.random() * (1000 - 200) + 100);
console.log(x);
拇指法则:-
Math.floor(Math.random() * - ( max - ( 2 * min ) ) + min )
答案 2 :(得分:0)
function random(min, max) {
console.log("Multiplying by: " + (max - min));
console.log("And adding : " + min);
return Math.floor(Math.random() * (max - min) + min);
}
console.log(random(100, 1000));
答案 3 :(得分:0)
函数Math.random()返回一个介于0和1之间的数字。
使用“ Math.random()*(1000-100)”时,此部分代码生成0到1之间的数字,然后将其乘以900,这将得到0到900之间的数字。
现在,在最后一个块中,您确实将100加上了先前生成的数字,结果是0到900 + 100之间的数字,结果是100到1000之间。
答案 4 :(得分:0)
Math.random()
生成浮点数时,需要将其转换为整数。
我们可以使用parseInt()
,但是有一个简写,~~
bitwise operator。 Performances are known to be excellent。
console.log(
100 + ~~(Math.random() * 800)
)
一个可能的选择是web crypto api,它可能会慢一些,但是可以做到最好的随机性。返回0到256之间的整数。
console.log(
100 + ~~(crypto.getRandomValues(new Uint8Array(1))[0] * 3.13)
)