在JavaScript中生成随机数

时间:2019-04-17 07:10:36

标签: javascript

我正在使用此函数生成1000到100之间的随机数。 但是根据我的说法,这里是(max-min)+ min,max- min = 900和min = 100,因此它不应该生成900到100之间的数字吗?但是它返回的数字大于900又如何呢?我很困惑。并告诉我如何检查随机函数生成的数字范围?有什么帮助吗?

  x = Math.floor(Math.random() * (1000 - 100) + 100);
  console.log(x);

5 个答案:

答案 0 :(得分:1)

随机数Math.random() * (max - min) + min的公式是在minmax之间获得均匀分布的数字的正确公式。

max - min将为您提供生成随机数的范围。因此,在这种情况下,1000 - 100的范围为900

乘以Math.random()将为您提供范围内的随机数。因此,Math.random()乘以0.5后得到450

最后,将min添加到随机选择中可确保您获得的数字在minmax的范围内。

例如,Math.random()产生0.01,如果我们替换公式,则得到0.01 * (1000 - 100) = 9,它在下方 min。相反,如果Math.random()产生1,则1 * (1000 - 100) = 900是可能从该范围获得的最高随机数,但仍低于max。在两种情况下,都将min添加到结果中可确保您获得的随机数在maxmin

之内

答案 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 operatorPerformances 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)
      
)