Javascript 为什么我要把Math.floor和Math.random结合起来?
为什么有人会对Javascript 为什么我要把Math.floor和Math.random结合起来?,javascript,math,random,floor,Javascript,Math,Random,Floor,为什么有人会对Math.random结果调用Math.floor?我见过这样的用法: Math.floor(Math.random() * num); 有人能解释一下吗?Math.random返回一个介于0和1之间的浮点数 返回[0,1]范围内的浮点伪随机数,即从0(包括)到但不包括1(排除),然后可以将其缩放到所需的范围 将该值乘以n将得到一个介于0(包括)和n(不包括)之间的浮点数 然后使用Math.floor将此浮点数转换为介于0和n-1(含)之间的整数。Math.random()将给您
Math.random
结果调用Math.floor
?我见过这样的用法:
Math.floor(Math.random() * num);
有人能解释一下吗?
Math.random
返回一个介于0和1之间的浮点数
返回[0,1]范围内的浮点伪随机数,即从0(包括)到但不包括1(排除),然后可以将其缩放到所需的范围
将该值乘以n将得到一个介于0(包括)和n(不包括)之间的浮点数
然后使用Math.floor
将此浮点数转换为介于0和n-1(含)之间的整数。Math.random()
将给您一个长的随机小数。通常情况下,将该小数乘以10、100、1000等得到一个随机整数。但是,由于这样的小数太长,要得到一个绝对整数,您可以使用Math.floor()
将该数字四舍五入。我为什么要将数学地板
与数学随机
相结合?
组合它们是因为否则它将返回浮点。使用Math.floor可确保它是指定范围内的整数
Math.random返回一个介于0和1之间的单位。将其与num
或max range相乘,得到一个最大值为该数字的值(1*num
)。因此,Math.floor再次强制它为一个整数
幕后: 随机数->0.35->乘以11的最大值(
num
),得到3.85->数学下限(3.85)->3
记住,
num
是MAX+1。将num
设置为5只会生成1-4个数字
有关更多信息,请查看此链接: Tada:)
Math.random()
返回类似于[0,1]之间的0.8747230430599302
我们使用.floor
将其向下舍入到最接近的整数。例如:
Math.random()*5==2.5889716914389282
这将生成一个介于[0,5]之间的数字
Math.floor(Math.random()*5)=2//在本场景中
生成一个介于[0,4]之间的数字
为什么有人会对一个随机的结果叫Math.floor
简而言之,当您要将十进制值截断为最接近的整数时,可以调用Math.floor()
(只需删除小数部分。因此,3.9变为3,2.1变为2,等等。因此,当您需要一个整数,并且想要一个小于或等于小数值的整数时,通常会使用它。数学库还有math.ceil()
和math.round()
math.ceil()
获取下一个较大的整数,Math.round()
根据更接近的整数向上或向下舍入到最近的整数
我见过它的用法如下:Math.floor(Math.random()*num);
将Math.floor(Math.Random()*num)
分解为各个部分并解释每个部分,您可以得到以下结果:
Math.random()
为您提供一个介于0和1之间的随机十进制数,包括0,但不包括1。因此,它可能会为您提供类似于0.38548569372
的内容
Math.random()*num
为您提供一个介于0和num之间的随机十进制数,包括0,但不包括num。因此,如果num为10,它可能会为您提供3.8548569372
Math.floor(Math.random()*num))
为您提供一个介于0和num之间的随机整数,包括0,但不包括num。因此,它可能会为您提供3
Math.floor()
仅将十进制数截断为整数部分。随机整数通常用于从数组中获取随机值(必须是整数)。用于获取介于0和(最大值-1)之间的整数随机数
另一方面,使用|0
比在
const randomInt = Math.random() * num | 0;
|0
是一个二进制或0的值,JavaScript规范有效地说,在发生|
之前,结果被转换为整数。请注意|0
与Math.floor
|0
四舍五入为0,而Math.floor
四舍五入
| 0 Math.floor
------+------+------------
2.5 | 2 | 2
1.5 | 1 | 1
0.5 | 0 | 0
-0.5 | 0 | -1
-1.5 | -1 | -2
-2.5 | -2 | -3
尝试Math.random()*1000例如,您可能会得到如下结果:885.993620533221,在许多情况下,我们需要一个舍入的数字,因此许多开发人员将其与Math.floor或Math.ceil一起使用,以获得一个类似885的整数,如果您不介意使用浮点数,请保持原样
有关Math.floor如何工作的更多信息,请查看以下链接:
@quixoto因为我多次看到这段代码,所以我说“我们”,无论如何,我会改变它>,我不是在批评你的措辞。这类问题实际上是很有用的,说明这是你经常看到的东西,或者在这样或那样的代码中经常看到的东西,这样人们就有了背景,知道如何最好地回答你。对不起,嗨,杰克,但要澄清一下……地板向下,而天花板向上吗?@Myles-
Math.floor()给出下一个较低的整数。Math.ceil()给出下一个较高的整数。Math.round()
检查该值,并根据其更接近的整数给出下一个较低或下一个较高的整数。将来,对于所有这些类型的问题,都是一个很好的参考。isMath.random()
真的包含了0
?我在循环中运行了它100万次,但它没有生成0
:我问这个问题的原因是因为某些计算,比如Math.ceil(Math.random()*10)
比Math.floor(Math.random()*10+1)
更简洁
真的包含0
?我在循环中运行了它1百万次,但它没有生成0
一次:/r
var num = Math.floor(Math.random() * 1000); // e.g. 885
var flNum = Math.random() * 1000; //e.g. 885.9936205333221