javascript - 为什么 Math.floor((Math.random() * 999999) + 100000) 不能可靠地生成 6 位数字?

标签 javascript math random

我看过其他一些问题,但它们都脱节了,confusing答案。

我想要一个随机的 6 位数字,这个脚本在大多数情况下都能正常工作 - 但它也会在大约 20% 的时间内生成 7 位数字。

Math.floor((Math.random() * 999999) + 100000)

我的问题:

  1. 为什么?
  2. 避免这种情况的正确方法?

请不要建议使用子字符串或类似的东西,因为它有点 hack

最佳答案

这是一个简单的计算范围错误。注意:下面的文本使用 [] 来表示一个包含的范围和() 来表示一个独占范围。

要获得范围 [100000, 999999],在整数数学中相当于 [100000, 1000000) 您需要获得范围 [0, 900000) 内的数字,然后加上 100000,例如

Math.floor(900000 * Math.random()) + 100000

因子是 900000 而不是 899999,因为 Math.random() 函数产生 [0, 1) 范围内的数字,即不包括 1 本身。

关于javascript - 为什么 Math.floor((Math.random() * 999999) + 100000) 不能可靠地生成 6 位数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25122102/

相关文章:

javascript - 使用固定列垂直滚动

javascript求和多维数组

javascript - 附加到 D3 中时元素不出现

math - 是否可以以不使用操作顺序的方式编写 (a*b)+(c*d) ?

python - 我在哪里可以检查 Python 的数学函数?

math - 透视投影,4分

c - 从数组中随机数并在 C 中删除

javascript运行时错误对象不支持属性或方法 'tabs'

java - Java中如何实现C的drand48和srand48?

algorithm - 在矩形区域内均匀生成一个随机点(一些矩形可能重叠)