为什么n't Math.floor((Math.random() * 999999) + 100000)可靠地生
Why isn't Math.floor((Math.random() * 999999) + 100000) reliable for producing 6 digit numbers?
我看了其他一些问题,但它们的答案都是脱节的,令人困惑的。
我想有一个随机的6位数字,大多数时候这个脚本工作-但是它也产生7位数字大约20%的时间。
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本身。
问题出在你的数学上。
Math.random
产生一个从0.0到1.0的浮点数。在最坏的情况下,将1.0乘以999999,再加上100000。结果为1099999.0(对于最大的情况)。
这一行应该总是产生一个6位数字
Math.floor((Math.random() * 899999) + 100000)
相关文章:
- 如何防止Math.max()返回NaN
- Math.min()和Math.max()之间有什么区别?在Javascript中
- JavaScript Vector2d Math
- Math.exp() for bigInt?
- 如何使一个Math.random数组元素比另一个数组元素更有可能被选中
- 为什么Math.pow(1,无穷大)返回NaN
- 对变量使用math.max并显示相应的变量
- JavaScript basis 是 math.pow 函数中的十进制数
- Javascript Math.floor 函数失误或实现之谜
- Math.random不断返回相同的答案
- 为什么math.bignumber()返回一个对象?以及我如何使用它
- JS:如何在使用 Math.random() 时排除一系列值
- Math.min.apply 返回 0 表示空值
- Javascript;使用math.random函数随机执行一个操作
- 为什么Java和Javascript Math.round(-1.5)到-1
- Performance: toFixed() vs. Math.floor(x * 10000)
- Math.round MidPointRounding.AwayFromZero in javascript
- Java脚本中的Math.max函数
- 使用Math.round的奇怪方法结果
- 为什么n't Math.floor((Math.random() * 999999) + 100000)可靠地生