2012-08-15 78 views
2

的幾點思考我學習JavaScript和希望有關生成隨機整數的一些信息。我看它在googlestackoverflow,大多發現這樣的代碼(在情況下,我們希望數字1到52):有關生成隨機數

var randInt=function(){ 
    number=Math.floor(Math.random()*52+1); 
}; 

var randNumMin = 1; 
var randNumMax = 52; 
var randInt = function(){ 
    number = (Math.floor(Math.random() * (randNumMax - randNumMin + 1)) + randNumMin); 
}; 

我讀到Math.random一些參考和發現它產生數字從01。如果Math.random產生1,我們將獲得數5,所以這意味着我們將得到錯誤。我同意這是非常罕見的情況,但這是可能的。我稍微修改了代碼以避免該錯誤(在我們的案例中,代號爲53)。這裏我認爲是一個正確的代碼,用於在JavaScript中生成隨機數。在你的例子只生成整數,但我認爲這是可以修改代碼,並生成任何類型的號碼:

var randInt = function(){ 
    number = Math.floor(Math.random()*52+1); 
    if (number === 53){ 
     randInt(); 
    } 
}; 

var randNumMin = 1; 
var randNumMax = 52; 
var randInt = function(){ 
    number = (Math.floor(Math.random() * (randNumMax - randNumMin + 1)) + randNumMin); 
    if (number===53){ 
     randInt(); 
    } 
}; 

我是新來的JavaScript,將是有趣的,聽到一些關於來自JavaScript專業人士的想法。提前致謝。

回答

11

Math.random()函數生成隨機數x其中0 <= x < 1。所以它不會產生正是 1,儘管它可能出現非常接近。

the documentation for random

返回該範圍[0, 1)浮點,僞隨機數,從0(含)直到但不包括1(不包括),其可以然後規模到你想要的範圍。

2

只要把你的第一個代碼示例,並減去一個來自52.通式是這樣的:

random number between X and Y = (Y - X) * Math.random() + X 

或整數,

Math.round((Y - X)*的Math.random()+ X)

或者更準確的(如由@Guffa指出的),

Math.floor((Y-(X-1)) * Math.random() + X) 
+0

否,那將產生X和X + Y之間的隨機數。 – Guffa 2012-08-15 21:43:23

+0

@Guffa不,它不會。注意(Y - 1) – 2012-08-15 21:45:26

+0

@Guffa的OP的公式會返回。因此,發佈在SO – 2012-08-15 21:45:58

0

你不需要使用地板,因爲它確實會降低的結果。

只是使用round

Math.round(的Math.random(51))+ 1