2012-10-14 30 views
9

Nếu tham số num là 52, có bao nhiêu giá trị trả về có thể có? là 52 hay 53? Nếu tôi hiểu điều này một cách chính xác, Math.random sử dụng các giá trị ngẫu nhiên từ 0 đến 1. Nếu vậy, thì 0 là giá trị trả về có thể và vì vậy là 52. Điều này dẫn đến 53 giá trị trả về có thể. Điều này có đúng không? Lý do tôi hỏi là một cuốn sách mà tôi đang học từ sử dụng mã này cho một cỗ bài. Tôi tự hỏi nếu num nên bằng 51?Javascript: Math.random

Thanks ...

function getRandom(num) { 
    var my_num = Math.floor(Math.random * num); 
    return my_num; 
}; 
+0

Đó là số không đến một, * bao gồm * của zero nhưng * độc quyền * một. – Pointy

+0

Cảm ơn tất cả các trả lời dưới đây. Trút trúng nó như những người khác dưới đây. 1 là không bao gồm (đây là sự hiểu lầm của tôi, tôi nghĩ 0 và 1 đã được bao gồm cả hai) để làm cho tất cả trở về 0 đến 51 hoặc tổng số 52 giá trị trả lại ... – nanonerd

Trả lời

12
Math.floor(Math.random() * num) // note random() is a function. 

này sẽ trả lại toàn bộ số nguyên từ 0 (bao gồm 0) để num (KHÔNG bao gồm num).

Math.random trả về một số giữa 0 (bao gồm) và 1 (độc quyền). Nhân kết quả bằng X cho bạn giữa 0 (bao gồm) và X (độc quyền). Thêm hoặc trừ X thay đổi phạm vi bằng + -X.

Dưới đây là một số chức năng tiện dụng từ MDN:

// Returns a random number between 0 (inclusive) and 1 (exclusive) 
function getRandom() { 
    return Math.random(); 
} 

// Returns a random number between min and max 
function getRandomArbitrary(min, max) { 
    return Math.random() * (max - min) + min; 
} 

// Returns a random integer between min and max 
// Using Math.round() will give you a non-uniform distribution! 
function getRandomInt(min, max) { 
    return Math.floor(Math.random() * (max - min + 1)) + min; 
} 
2

Kể từ khi giá trị của Math.random dao động 0-1 (độc quyền); vì vậy nếu bạn vượt qua 52 trong getRandom, giá trị trả lại sẽ thay đổi từ 0 đến 52 (độc quyền). do đó, getRandom chỉ có thể trả về 52 giá trị. khi bạn đang sử dụng Math.floor. giá trị tối đa có thể được trả lại là 51.

+1

Điều này là không chính xác. 'Math.random()' sẽ không bao giờ trả lại 1. – Pointy

+0

@Pointy cảm ơn vì đã chỉ ra. Tôi thực hiện các thay đổi. – Anoop

3

Kể từ Math.random trả về một số thực giữa [0,1) (1không bao gồm), nhân kết quả trả về một số thực giữa [0, 52).

Vì bạn đang kết quả sàn, số lượng tối đa được trả lại là 51 và có 52 giá trị riêng biệt (đếm 0).

+0

Anh ấy có một cuộc gọi tới 'Math.floor()' trong đó ... anh ấy cũng không thực sự * gọi * 'Math.random'! – Pointy

+0

@Pointy: Đúng, chỉ cần nhận thấy điều đó. Tôi đoán không gọi chức năng là một lỗi đánh máy, vì anh ta nói anh ta lấy mã từ một cuốn sách. Hoặc lỗi trong cuốn sách, điều này liên quan nhiều hơn. –

Các vấn đề liên quan