关于 Math.floor(Math.random()* (max - min + 1) + min)的个人理解

2022-11-09 14:50:30  阅读 2736 次 评论 0 条

之前写的一个通过JavaScript取出特定区间的随机数,里面有一个公式,已经忘了逻辑。

文章是这个:【代码】JavaScript获取指定区间的随机数

Google一搜,连方程都出来了,这让我数学不好的人情何以堪>_<

这篇文章,我将从另一个非常直观的角度,来解析这个公式。

===========================

公式是这样的:

 Math.floor(Math.random()* (max - min + 1) + min)


我们一步步来分析:

  1. 为了方便理解,我们先假设 max=10 min=5

  2. 学过小学数学的都知道,先算乘除,后算加减,有括号的先算括号

  3. 把值带入公式可得 Math.random()* (10 - 5 + 1);

  4. 我们把它看成一个数轴,我们现在要取出,他们之间差值的随机数,你这么想,我要取出5-10的随机数,是不是这中间只有5种可能,8-10的随机数,是不是只有3种可能?

  5. 所以,干脆就从0开始,取出他们之间的随机数(原谅我画的难看)

    image.png

  6. 这10-5能理解,是得到了他们之间差值的随机数,但是为什么要+1呢?

  7. 这是因为Math.random()*5是获得了大于等于0小于5的值,是小于5啊,就是最大只能4.999999...,这外面还有个floor,直接变4了,就成了0-4的随机数了,显然不符合题意。

  8. 好了,+1的问题解决了,我们再说最后的+min,也就是+5是怎么回事。

  9. 既然把他们俩的差值算完了,现在假设获得到了3,我们要把它变成>=5  但是  <=10的值。

  10. 可以把上面那个选区平移,往右移动5位,也就是+5,结果将得到8。

image.png


问题解决,诶嘿~


微信扫码查看本文
本文地址:https://www.yangguangdream.com/?id=2219
版权声明:本文为原创文章,版权归 编辑君 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?