13

为什么有人会要求Math.floor结果Math.random?我见过它像这样使用:

Math.floor(Math.random() * num);

有人可以解释一下吗?

4

7 回答 7

19

Math.random返回一个介于 0 和 1 之间的浮点数。

返回 [0, 1) 范围内的浮点伪随机数,即从 0(包括)到但不包括 1(不包括),然后您可以将其缩放到所需的范围。

将其乘以 n 得到一个介于 0(包括)和 n(不包括)之间的浮点数。

Math.floor然后用于将此浮点数转换为介于 0 和 n - 1(含)之间的整数。

于 2011-11-03T22:41:55.193 回答
17

为什么有人会在 Math.random 结果上调用 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()将十进制数截断为仅整数部分。随机整数通常用于从数组中获取随机值(必须是整数)。

于 2011-11-03T22:45:25.703 回答
2

Math.random()会给你一个长的,随机的小数。通常做的是将该小数乘以 10、100、1000 等以获得随机整数。但是,由于这样的小数很长,要获得一个绝对整数,您可以Math.floor()将该数字向下舍入。

于 2011-11-03T22:43:04.300 回答
2

我为什么要结合Math.floorWith Math.random

你将它们结合起来,否则它会返回一个浮点数。使用 Math.floor 确保它是指定范围内的整数。

Math.random 返回一个介于 0 和 1 之间的单位。将其乘以您的num或最大范围可以得到一个最大值为该数字 (1 * num) 的值。同样,Math.floor 只是强迫它成为一个整数。


幕后花絮:

随机数 -> .35 -> 乘以num11 的最大值 ( ) -> 得到 3.85 -> Math.floor(3.85) -> 3。


记住numMAX+1。设置num为 5 只会生成数字 1-4!


您可以查看此链接以获取更多信息: http ://www.javascriptkit.com/javatutors/randomnum.shtml

多田 :)

于 2011-11-03T22:43:28.820 回答
1

Math.random()返回类似于0.8747230430599302[0,1) 之间的内容

我们用.floor它向下舍入到最接近的整数。例如:

Math.random()*5 == 2.5889716914389282 这会生成一个介于 [0,5) 之间的数字。

Math.floor(Math.random()*5) == 2 //in this scenario 生成 [0,4] 之间的数字

于 2011-11-03T22:43:53.473 回答
1

它用于获取 0 到 (max - 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
于 2017-04-06T23:24:33.623 回答
1
var num = Math.floor(Math.random() * 1000); // e.g. 885

var flNum = Math.random() * 1000; //e.g. 885.9936205333221

例如尝试 Math.random() * 1000,你可能会得到这样的结果:885.9936205333221,在很多情况下我们需要一个四舍五入的数字,所以很多开发人员使用它与 Math.floor 或 Math.ceil 来获得一个像 885 这样的整数,如果在你的情况下,你不介意有一个浮点数,让它保持原样......

有关 Math.floor 如何工作的更多信息,请查看此链接:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Math/floor

于 2017-04-06T23:36:48.437 回答