2011-12-20 13 views
5

Widziałem wiele miejsc za pomocą Math.floor() i Math.random()Wyjaśnij Math.floor (Math.random())

jak poniżej

$('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); 
    }); 
}); 

Dlaczego stosować Math.floor() i Math.random()?

Odpowiedz

10

Math.random da Ci liczbę zmiennoprzecinkową z zakresu od 0 (włącznie) do 1 (wyłącznie).

Pomnożenie przez liczbę 256 daje liczbę z zakresu od 0 (włącznie) do 256 (wyłącznie), ale wciąż zmiennoprzecinkowy.

Podanie tej liczby da Ci liczbę całkowitą z zakresu od 0 do 255 (włącznie).

Jest to liczba całkowita z zakresu od 0 do 255, która wymaga skonstruowania wartości RGB, takich jak rgb(72,25,183).

1

Math.floor poda liczbę całkowitą i pozbyć się ułamków dziesiętnych.

Math.random zwraca liczbę z zakresu od 0 do 1, a zatem po numerze pomnożonym przez 256 zostanie wygenerowana liczba dziesiętna. Właśnie dlatego chcesz pozbyć się ułamków dziesiętnych, w przeciwnym razie wartości rgb nie będą działać.

1

W przypadku Math.floor() należy zrzucić liczbę dziesiętną z Number. Jest przeciwieństwem Math.ceil().

Można również podwoić operację bitowego operatora odwróconego (~~), aby uzyskać to samo, co Math.floor() (chociaż oczywiście metoda floor() jest znacznie bardziej czytelna dla większości).

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

Wydaje się pożądane jest losowo kolor - jeden z każdym elementem losowo pomiędzy 0 a 255.

Math.random() zwraca liczbę losową na [0,1) (to znaczy może być dokładnie zerowe lub do ale nie wliczając jednego).

Pomnożenie tej losowej wartości przez 256 daje losową liczbę z zakresu [0,256] (tj. Może być 255.99, ale nigdy 256). Prawie tam, ale nie całkiem.

Math.floor() zaokrągla liczbę w dół do najbliższej całkowitej liczby całkowitej, co powoduje, że wynik jest liczbą całkowitą na [0,255] zgodnie z potrzebami.

1

Math.random zwraca wartość między 0 a 1. Powielamy ją za pomocą 256, więc zwróci ona wartość float między 0 a 256. math.floor pominie z niej wartość ułamkową.

0

~~Number to tylko Math.floor() dla liczb dodatnich. W przypadku liczb ujemnych jest to Math.ceil().

Dla liczb dodatnich można użyć:

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

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

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

dla liczb ujemnych można użyć:

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

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

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