我看过其他一些问题,但它们都脱节了,confusing答案。
我想要一个随机的 6 位数字,这个脚本在大多数情况下都能正常工作 - 但它也会在大约 20% 的时间内生成 7 位数字。
Math.floor((Math.random() * 999999) + 100000)
我的问题:
- 为什么?
- 避免这种情况的正确方法?
请不要建议使用子字符串或类似的东西,因为它有点 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/