【JavaScript】任意范围内整数随机数的生成

1,205 阅读2分钟

在JavaScript中,我们经常会用到某些范围的整数随机数,比如0-15,或者1-20,100-200等等,那么肯定要用到Math对象中的方法Math.random(),所以我们首先来说一说Math.random。 Math.random()方法为随机生成一个0-1之间的小数,位数不限,我们怎么利用这个方法来生成整数随机数呢? 那就不得不介绍一下Math对象中的几个其他的方法:

  • Math.round() 该方法就是我们常说的四舍五入,输出整数
  • Math.floor() floor是地板的意思,为向下取整
  • Math.parseInt() parseInt为取整的意思
  • math.ceil() ceil为天花板的意思,意为向上取整

万事具备,现在我们来构建一个思路。要想让0-1变成m-n,我们要做的事情。

  1. 首先我们需要得到随机数范围的长度,拿10~20举例,长度为10
  2. 此时我们让其长度和目标范围长度(也就是20-10)先相等,即Math.random()*length+min
  3. 现在要达到目标范围就非常的容易,再加上范围的下限即可,也就是Math.random()*length+min
  4. 那么现在给其取整,选择四舍五入就生成了一个10~20范围内的随机数了

这个方法的问题在于,上限和下限被取到的概率和其他数字并不均等。 还是以10-20举例,能取到10的范围只能是随机数10-10.5之间,同理能取到20的范围只能是随机数19.5~20之间,但中间随便一个数都有长度为1的区间可以取到,所以为了实现绝对平均,我们最好不要采用Math.round()的形式(如果仅仅就是为了随机,就无所谓了)。

那么后面我们可以使用Math.floor()来实现机会“平均”的随机,只需要做一个小小的改动将length+1即可,还是10~20这个例子,Math.random()(length+1)+min生成的是10-21之间的数字,此时我们只需要向下取整,而且每个整数都是机会均等的。

封装一个函数:

这就是我们的万能整数随机数的生成代码啦~ 欢迎大家积极互动留言!