2011-12-20 8 views
5

ho visto molti luoghi utilizzando Math.floor() e Math.random()Spiegami Math.floor (Math.random())

come qui di seguito

$('a.random-color').hover(function() { //mouseover 
    var col = 'rgb(' + (Math.floor(Math.random() * 256)) + ',' + (Math.floor(Math.random() * 256)) + ',' + (Math.floor(Math.random() * 256)) + ')'; 
    $(this).animate({ 
     'color': col, 
     'paddingLeft': '20px' 
    },1000); 
    },function() { //mouseout 
    $(this).animate({ 
     'color': original, 
     'paddingLeft': '0' 
    },500); 
    }); 
}); 

Perché utilizzare Math.floor() e Math.random()?

risposta

10

Math.random ti darà un numero in virgola mobile compreso tra 0 (incluso) e 1 (esclusivo).

Moltiplicando che per 256 si otterrà un numero compreso tra 0 (compreso) fino a 256 (esclusivo), ma ancora a virgola mobile.

Prendere la parola di questo numero ti darà un numero intero tra 0 e 255 (entrambi inclusi).

È il numero intero compreso tra 0 e 255 che è necessario costruire valori RGB come rgb(72,25,183).

1

Math.floor darà un numero intero e si sbarazzerà dei decimali.

Math.random restituisce un numero compreso tra 0 e 1 e pertanto produrrà numeri decimali quando moltiplicato con 256. Ecco perché si desidera utilizzare floor per eliminare i decimali altrimenti i valori rgb non funzioneranno.

1

Il Math.floor() deve eliminare la parte decimale di Number. È l'opposto di Math.ceil().

È anche possibile raddoppiare l'operatore di bit invertito (~~) per ottenere lo stesso valore di Math.floor() (sebbene ovviamente il metodo floor() sia molto più leggibile per la maggior parte).

~~(Math.random() * 256) 
2

Sembra un colore casuale è desiderato - uno con ciascun componente casuale tra 0 e 255.

Math.random() restituisce un numero casuale in [0,1) (cioè può essere esattamente uguale a zero o fino a ma non incluso uno).

Moltiplicare il valore casuale per 256 dà un numero casuale nell'intervallo [0,256) (cioè può essere 255,99, ma mai 256). Quasi lì, ma non del tutto.

Math.floor() arrotonda il numero verso il basso all'intero intero più vicino, rendendo il risultato un numero intero su [0,255] come desiderato.

1

Math.random restituisce un valore compreso tra 0 e 1. Lo si moltiplica con 256, quindi restituirà un valore float compreso tra 0 e 256. math.floor ometterà il valore della frazione da esso.

0

~~Number è solo il Math.floor() per i numeri positivi. Per i numeri negativi, è lo Math.ceil().

Per i numeri positivi è possibile utilizzare:

Math.floor(x) == ~~(x) 

Math.round(x) == ~~(x + 0.5) 

Math.ceil(x) == ~~(x + 1) 

Per i numeri negativi è possibile utilizzare:

Math.ceil(x) == ~~(x) 

Math.round(x) == ~~(x - 0.5) 

Math.floor(x) == ~~(x - 1) 
Problemi correlati