为什么我要将Math.floor与Math.random结合起来?

时间:2011-11-03 22:40:12

标签: javascript math random floor

为什么有人会在Math.floor结果上致电Math.random?我见过它用过:

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

有人可以解释一下吗?

7 个答案:

答案 0 :(得分:17)

Math.random返回0到1之间的浮点数

  

返回[0,1]范围内的浮点伪随机数,从0(包括)到最大但不包括1(不包括),然后可以缩放到所需范围。 / p>

将此乘以n得出0(包括)和n(不包括)之间的浮点数。

然后使用

Math.floor将此浮点数转换为0到n - 1(含)之间的整数

答案 1 :(得分:14)

  

为什么有人会在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()将十进制数截断为仅整数部分。随机整数通常用于从数组中获取随机值(需要为整数)。

答案 2 :(得分:1)

Math.random()会给你一个长的随机小数。通常做的是将十进制乘以10,100,1000等以获得随机整数。但是,由于这样的小数太长,要获得绝对整数,可以使用Math.floor()来舍入该数字。

答案 3 :(得分:1)

为什么我将Math.floorMath.random合并?

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

Math.random返回介于0和1之间的单位。将其乘以num或最大范围会得到一个最大值为1 * num的值。再次,Math.floor只是强迫它成为一个整数。


幕后故事:

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


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


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

田田:)

答案 4 :(得分:0)

Math.random()在{0,1)

之间返回0.8747230430599302之类的内容

我们使用.floor将其四舍五入为最接近的整数。例如:

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

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

之间的数字

答案 5 :(得分:0)

它用于获取0到(max - 1)之间的整数随机数。

另一方面,在

中使用| 0的速度更快
const randomInt = Math.random() * num | 0;

| 0是二进制为0,JavaScript规范有效地说结果在|发生之前转换为整数。请注意,| 0Math.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

答案 6 :(得分:0)

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