Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
gogoend opened this issue Nov 27, 2021 · 0 comments
Open

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

gogoend opened this issue Nov 27, 2021 · 0 comments

Comments

@gogoend
Copy link
Owner

gogoend commented Nov 27, 2021

原文曾发表在 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)

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant