2012-10-14 11 views
9

Jeśli parametr num ma wartość 52, to ile jest możliwych wartości zwracanych? to jest 52 czy 53? Jeśli rozumiem to poprawnie, Math.random używa losowych wartości od 0 do 1 włącznie. Jeśli tak, wówczas 0 jest możliwą wartością zwracaną, a więc 52. Wynik daje 53 możliwe wartości zwracane. Czy to jest poprawne? Rozumiem, że książka, której się uczę, używa tego kodu do talii kart. Zastanawiam się, czy num powinien wynosić 51?JavaScript: Math.random

Dzięki ...

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

To zera do jednego, włącznie * * * od zera, ale wykluczają * jednego. – Pointy

+0

Dzięki za wszystkie odpowiedzi poniżej. Pointy uderzył tak jak inni poniżej. 1 nie jest włączone (to było moje nieporozumienie, myślałem, że 0 i 1 były obie włącznie), więc sprawia, że ​​wszystkie zwraca 0 do 51 lub łącznie 52 wartości zwracanych ... – nanonerd

Odpowiedz

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

ta zwróci wszystkie liczby całkowite od 0 (łącznie 0) do num (nie wliczając num).

Math.random zwraca liczbę z zakresu od 0 (włącznie) do 1 (wyłącznie). Pomnożenie wyniku przez X daje od 0 (włącznie) do X (wyłączne). Dodanie lub odjęcie X przesuwa zakres o + -X.

Oto kilka przydatnych funkcji z 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

Ponieważ wartość Math.random waha się od 0 do 1 (wyłączne); , więc jeśli przekażecie 52 w getRandom, zwracana wartość będzie się wahać od 0 do 52 (wyłącznie). więc getRandom może zwrócić tylko 52 wartości. jak używasz Math.floor. wartość maksymalna może być zwrócony jest 51.

+1

To jest nieprawidłowe. 'Math.random()' nigdy nie zwróci 1. – Pointy

+0

@Pointy dzięki za wskazanie. Wprowadzam zmiany. – Anoop

3

Od Math.random zwraca liczbę rzeczywistą pomiędzy [0,1) (1 jest nie włącznie), mnożąc wynik zwraca liczbę rzeczywistą pomiędzy [0, 52).

Ponieważ są podłogi wynik, maksymalna liczba zwrócony jest 51 i istnieje 52 różnych wartości (licząc 0).

+0

On ma połączenie z 'Math.floor()' tam ... również on nie jest faktycznie * calling * 'Math.random'! – Pointy

+0

@Pointy: Właśnie, właśnie to zauważyłem. Chyba nie wywołanie tej funkcji jest literówką, ponieważ powiedział, że dostał kod z książki. Lub błąd jest w książce, która jest bardziej niepokojąca. –

Powiązane problemy