2011-11-03 28 views
10

为什么有人会在Math.random结果上致电Math.floor?我已经看到了使用,如:为什么要将Math.floor与Math.random结合使用?

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

有人能解释吗?

+0

谁是“我们”? :) –

+0

@quixoto因为我多次看到这段代码,这就是为什么我说“我们”,生病无论如何改变它> –

+1

我并没有批评你的措辞。对于这类问题来说,这很有用,可以说明这是你经常看到的东西,或者经常在某种类型的代码中看到,这样人们就可以获得上下文并知道如何最好地回答你。 –

回答

17

Math.random返回0和1

之间的浮点数在范围[0,则返回一个浮点,伪随机数,1),是从0(含)最多但不包括1(独占),然后您可以缩放到您想要的范围。

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

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

1

Math.random()会给你一个很长的随机小数。通常所做的就是将该小数乘以10,100,1000等,以得到一个随机的整数。但是,由于这样的小数点很长,为了得到一个绝对的整数,您使用Math.floor()来减少该数字。

1

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

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

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


幕后:

随机数 - > 0.35 - 由最大值乘以>的(num)11 - >获取3.85 - > Math.floor(3.85) - > 3.


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


你可以看看这个链接获取更多信息:http://www.javascriptkit.com/javatutors/randomnum.shtml

田田:)

0

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]

12

之间的数字打破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

对不起,杰克,但要澄清......地板倒圆角,而天花板向上? – Myles

+1

@Myles - 'Math.floor()'给你下一个较低的整数。 'Math.ceil()'给你下一个更高的整数。 'Math.round()'检查这个值,并给出下一个更高或更高的整数,这取决于它更接近。将来,[MDN网站](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor)对于所有这些类型的问题都是很好的参考。 – jfriend00

0

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

在另一方面它的速度更快在

const randomInt = Math.random() * num | 0; 

| 0使用| 0作为是二进制或0其中的JavaScript SPEC有效表示,结果被转换成一个整数的|发生之前。请注意,| 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 
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或数学使用.ceil得到一个像885的整数,如果你的情况,你不介意有一个浮点数,因为它是...

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

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

相关问题