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

tim*_*ker 1 javascript random math

我已经看了一些其他问题,但它们都有脱节和混乱的答案.

我希望有一个随机的6位数字,大部分时间这个脚本都可以工作 - 但它确实产生了大约20%的7位数字.

Math.floor((Math.random() * 999999) + 100000)
Run Code Online (Sandbox Code Playgroud)

我的问题:

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

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

Aln*_*tak 5

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

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

Math.floor(900000 * Math.random()) + 100000
Run Code Online (Sandbox Code Playgroud)

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