最近在学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
1 至 1.99999 ...- > 1
...
5 至 5.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开始。
0,1,2,3,4,5 //我们拥有的
5,6,7,8,9,10 //我们想要的
请注意,如果我们在第一行的所有数字上加5,就会得到第二行。示例中的最小值是5。
因此,如果将最小值添加到公式的末尾,它将把所有数字移到我们想要的数字上。
数学。地板(数学。随机() * (最大值 - 最小 + 1 )) + 分钟;
您可以将其视为2步操作,放大范围,然后移动它。
我的意思是说要简短一些,但希望对您有所帮助。