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

最近在学JavaScript的Math.random()。
对这个公式Math.floor(Math.random()*(max-min + 1))+ min)挺感兴趣的,就在网上找了一些说明,比较喜欢这个地址里杰森·安内洛对这个的解析,我把它放在这里,感兴趣的可以看看,最后还是粘贴复制了一遍

我们知道Math.random()返回范围为[0,1)的值。包括0,但排除1。您可以将其视为0到0.999999的范围…

现在,将结果传递给Math.floor()函数。

数学。地板(数学。随机());

因为floor将截断小数点并返回整数部分,所以我们总是在这里得到0。确保您了解这一点,否则其余的将毫无意义。询问是否需要。

我们只能从中得到1个整数。整数为0并不是很重要,但是我们只能得到1个整数。

如果我们能够从中得到更多的数字,那么我们需要扩大该范围。当您将某物乘以2时,它会变成以前的两倍。它放大了2倍。让我们看看将Math.random()乘以2会发生什么。

数学。地板(数学。随机() *  2;

这将为我们提供0到1.999999的新范围,这是我们开始使用的范围的两倍。

将这些数字传递到Math.floor中会发生什么?从0到0.9999 …生成的所有数字将被截断为0,从1到1.9999 …的所有数字将被截断为1

现在我们可以从中得到2个不同的整数。如果我们乘以2,我们可以得到2个数字。可以说,如果我们乘以6,那么我们就能得出6个数字。

这将使我们的范围是0到5.99999 …的6倍。

我不会全部写出来,但是在通过floor函数之后,您会得到

0.99999 ...-  >  0 
11.99999 ...-  >  1 
... 
55.99999 ...-  >  5

通常,将Math.random()与之乘以将能够生成多少个整数。

现在我们可以开始推导公式,我将使用一个特定的示例来提供帮助。

假设我们要生成5到10(含)之间的数字。我们需要知道那里有多少个数字。

设置变量-

var  max  =  10 ; 
var  min  =  5 ;

如果我们将它们列出为5、6、7、8、9、10,并算出它们,我们会发现总数为6。从之前我们知道,我们必须乘以6才能得出6个数字。

我们如何使用我们的max和min变量得出6个?如果我max - min得到5,那是1短。max-min为您提供5到10的距离。如果您希望总数量,则必须始终加1。

这使我们表达 max - min + 1

将其放入公式中

数学。地板(数学。随机() * (最大值 - 最小 + 1 ));
重要的max - min + 1是用括号括起来,以便所有这些操作都在乘法之前发生。

此时,公式可以生成正确数量的数字,但它们始终从0开始,因为Math.random的范围从0开始。


012345 //我们拥有的
 5678910 //我们想要的

请注意,如果我们在第一行的所有数字上加5,就会得到第二行。示例中的最小值是5。

因此,如果将最小值添加到公式的末尾,它将把所有数字移到我们想要的数字上。

数学。地板(数学。随机() * (最大值 - 最小 + 1 )) + 分钟;
您可以将其视为2步操作,放大范围,然后移动它。

我的意思是说要简短一些,但希望对您有所帮助。

你可能感兴趣的:(JavaScript)