Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我要把Math.floor和Math.random结合起来?_Javascript_Math_Random_Floor - Fatal编程技术网

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()
检查该值,并根据其更接近的整数给出下一个较低或下一个较高的整数。将来,对于所有这些类型的问题,都是一个很好的参考。is
Math.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