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

时间:2014-08-04 15:21:39

标签: javascript math random

我已经查看了其他一些问题,但他们都有脱节和confusing个答案。

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

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

我的问题:

  1. 为什么?
  2. 正确的避免这种方式?
  3. 请不要建议使用子字符串或类似的东西,因为它有点像黑客

2 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:1)

问题在于你的数学。

Math.random产生一个从0.0到1.0的浮点数。在最坏的情况下,您将1.0乘以999999并再添加100000。这导致1099999.0(最大的情况)。

此行应始终生成一个6位数字

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