[英]Why isn't Math.floor((Math.random() * 999999) + 100000) reliable for producing 6 digit numbers?
这是一个简单的计算范围误差。 注意:以下文字使用[
和]
表示包含范围,使用(
或)
表示排除范围。
要获得范围[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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.