JavaScript中Math.floor(Math.random()*(Max-Min+1)+Min)公式原理解析
解析生成指定范围随机整数的公式
我来一步步拆解这个公式,帮你搞懂它为啥能生成myMin到myMax之间(包含两端)的随机整数~
咱们把公式拆成几个核心部分来看:
Math.random()的作用
这个方法会返回一个大于等于0,小于1的随机浮点数,比如0.23、0.999,但永远不会等于1。这是整个随机数生成的基础。(myMax - myMin + 1)的意义
这一步是计算你要的范围里总共有多少个整数。比如你例子里的10到20,20-10+1=11,也就是10、11……20一共11个整数。这一步的作用是确定随机数的“可选总数”。Math.random() * (myMax - myMin + 1)的转换
把第一步的随机浮点数乘以这个总数,得到的结果是**大于等于0,小于(myMax - myMin + 1)**的浮点数。还是拿10到20举例,这一步会得到0到11之间的浮点数(比如5.67、10.99,永远到不了11)。+ myMin的范围平移
这一步是把范围“平移”到我们需要的区间。上面的0到11的浮点数加上10之后,就变成了10到21之间的浮点数(比如15.67、20.99,永远到不了21)。Math.floor()的取整操作
这个方法是向下取整,也就是把浮点数转换成小于等于它的最大整数。比如15.67取整后是15,20.99取整后是20,刚好落在10到20的区间里,而且每个整数被选中的概率是均等的。
举几个具体的例子更直观:
- 如果
Math.random()返回0 → 0*11=0 → 0+10=10 →Math.floor(10)=10(刚好是最小值) - 如果
Math.random()返回0.999 → 0.999*11≈10.989 → 10.989+10≈20.989 →Math.floor(20.989)=20(刚好是最大值) - 如果
Math.random()返回0.5 → 0.5*11=5.5 →5.5+10=15.5 →Math.floor(15.5)=15(中间的随机数)
这样整个公式就完美实现了“返回myMin到myMax之间随机整数”的需求~
内容的提问来源于stack exchange,提问作者an4s911
相关产品推荐
相关产品推荐

