gogoend / blog

blogs, ideas, etc.
MIT License
9 stars 2 forks source link

使用`Math.random()`封装范围内随机数生成器 #73

Open gogoend opened 3 years ago

gogoend commented 3 years ago

原文曾发表在 CSDN 上。

之前上课的时候,网页课老师曾经教过使用Math.random()产生范围内随机数的方式:

function random(min,max) {
  return Math.random()*(max-min)+min
}

不过之前有很长一段时间我都百思不得其解,为何会有如此这样一个“公式”。不过最近想通了~

本文就来介绍一下这个所谓的“公式”是如何产生的。

首先我们知道,Math.random()可以拿到一个[0, 1)范围内的随机数,但仅仅是获取[0, 1)范围内的数值显然过于局限。因此如何封装出一个能让我们自定义范围的随机数生成器呢?

我们尝试来改一下要产生的随机数范围的上限。假设我们要生成一个[0, 100)范围内的随机数,该如何处理呢?显然只需:

Math.random() * 100

即可,即生成的数乘以100。

接下来我们来改一下下限。假设我们要生成一个[90, 100)范围内的随机数。

首先我们知道下限是90。接下来我们需要获取一个数值,使得下限加上这个数值后能够逼近100。因此这里用上限减去下限,得到下限到上限的距离,使用这个距离乘以一个[0, 1)范围内的随机数就得到我们在下限基础上需要加的数值。因此最终就得到了:

90 + Math.random() * (100 - 90)

根据这个算式进行抽象,就得到了我们所需的范围内随机数生成器,也就是文章开头的“公式”