Open gogoend opened 3 years ago
原文曾发表在 CSDN 上。
之前上课的时候,网页课老师曾经教过使用Math.random()产生范围内随机数的方式:
Math.random()
function random(min,max) { return Math.random()*(max-min)+min }
不过之前有很长一段时间我都百思不得其解,为何会有如此这样一个“公式”。不过最近想通了~
本文就来介绍一下这个所谓的“公式”是如何产生的。
首先我们知道,Math.random()可以拿到一个[0, 1)范围内的随机数,但仅仅是获取[0, 1)范围内的数值显然过于局限。因此如何封装出一个能让我们自定义范围的随机数生成器呢?
[0, 1)
我们尝试来改一下要产生的随机数范围的上限。假设我们要生成一个[0, 100)范围内的随机数,该如何处理呢?显然只需:
[0, 100)
Math.random() * 100
即可,即生成的数乘以100。
接下来我们来改一下下限。假设我们要生成一个[90, 100)范围内的随机数。
[90, 100)
首先我们知道下限是90。接下来我们需要获取一个数值,使得下限加上这个数值后能够逼近100。因此这里用上限减去下限,得到下限到上限的距离,使用这个距离乘以一个[0, 1)范围内的随机数就得到我们在下限基础上需要加的数值。因此最终就得到了:
90
100
90 + Math.random() * (100 - 90)
根据这个算式进行抽象,就得到了我们所需的范围内随机数生成器,也就是文章开头的“公式”
之前上课的时候,网页课老师曾经教过使用
Math.random()
产生范围内随机数的方式:不过之前有很长一段时间我都百思不得其解,为何会有如此这样一个“公式”。不过最近想通了~
本文就来介绍一下这个所谓的“公式”是如何产生的。
首先我们知道,
Math.random()
可以拿到一个[0, 1)
范围内的随机数,但仅仅是获取[0, 1)
范围内的数值显然过于局限。因此如何封装出一个能让我们自定义范围的随机数生成器呢?我们尝试来改一下要产生的随机数范围的上限。假设我们要生成一个
[0, 100)
范围内的随机数,该如何处理呢?显然只需:即可,即生成的数乘以100。
接下来我们来改一下下限。假设我们要生成一个
[90, 100)
范围内的随机数。首先我们知道下限是
90
。接下来我们需要获取一个数值,使得下限加上这个数值后能够逼近100
。因此这里用上限减去下限,得到下限到上限的距离,使用这个距离乘以一个[0, 1)
范围内的随机数就得到我们在下限基础上需要加的数值。因此最终就得到了:根据这个算式进行抽象,就得到了我们所需的范围内随机数生成器,也就是文章开头的“公式”