2011-11-03 25 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

相關問題