2012-10-14 12 views
9

Se il parametro num è 52, quanti possibili valori di ritorno ci sono? è 52 o 53? Se ho capito bene, Math.random usa valori casuali da 0 a 1 inclusi. Se è così, allora 0 è un possibile valore di ritorno e così è 52. Ciò comporta 53 possibili valori di ritorno. È corretto? Motivo che chiedo è che un libro che sto imparando usi questo codice per un mazzo di carte. Mi chiedo se num debba eguagliare 51?Javascript: Math.random

Grazie ...

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

E 'zero a uno, * * comprensivo di zero, ma * * esclusiva di uno. – Pointy

+0

Grazie per tutte le risposte di seguito. Colpire a punta così come gli altri sotto. 1 non è inclusivo (questo era il mio fraintendimento, pensavo che 0 e 1 fossero entrambi inclusi) in modo che tutti i ritorni da 0 a 51 o un totale di 52 valori di ritorno ... – nanonerd

risposta

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

Ciò restituirà tutti i numeri interi da 0 (incluso 0) per num (ad esclusione num).

Math.random restituisce un numero compreso tra 0 (incluso) e 1 (esclusivo). Moltiplicando il risultato per X si ottiene tra 0 (inclusi) e X (esclusivi). L'aggiunta o la sottrazione di X sposta l'intervallo di + -X.

Ecco alcune funzioni a portata di mano da 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

Dal valore di Math.random varia da 0 a 1 (esclusiva); quindi se si passa 52 in getRandom, il valore restituito varierà da 0 a 52 (esclusivo). quindi getRandom può restituire solo 52 valori. come stai usando Math.floor. il valore massimo può essere restituito è 51.

+1

Questo non è corretto. 'Math.random()' non restituirà mai 1. – Pointy

+0

@Pointy grazie per aver segnalato. Apporto le modifiche. – Anoop

3

Dal Math.random restituisce un numero reale tra [0,1) (1 è non compreso), moltiplicando il risultato restituisce un numero reale tra [0, 52).

Poiché il risultato è il pavimento, il numero massimo restituito è 51 e ci sono valori distinti 52 (conteggio 0).

+0

Ha una chiamata a 'Math.floor()' in là ... inoltre in realtà non sta chiamando * 'Math.random'! – Pointy

+0

@Pointy: Giusto, l'ho notato. Immagino che non chiamare la funzione sia un refuso, dal momento che ha detto di aver ricevuto il codice da un libro. O l'errore è nel libro, che è più preoccupante. –

Problemi correlati