2011-12-20 19 views
5

he visto muchos lugares usando Math.floor() y Math.random()Explique Math.floor (Math.random())

, como a continuación

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

Por qué utilizan Math.floor() y Math.random()?

Respuesta

10

Math.random le dará un número de coma flotante entre 0 (inclusive) y 1 (exclusivo).

Al multiplicar ese valor por 256, obtendrá un número en el rango de 0 (inclusive) a 256 (exclusivo), pero aún en coma flotante.

Tomar la palabra de ese número le dará un entero entre 0 y 255 (ambos inclusive).

Es el entero de 0 a 255 que necesita para construir valores RGB como rgb(72,25,183).

1

Math.floor dará un número entero y se deshace de los decimales.

Math.random devuelve un número entre 0 y 1 y, por lo tanto, producirá números decimales cuando se multiplique por 256. Es por eso que quiere usar floor para deshacerse de los decimales, de lo contrario los valores de rgb no funcionarán.

1

El Math.floor() es soltar la parte decimal del Number. Es lo opuesto a Math.ceil().

También puede doblar el operador de inversión bit a bit (~~) para lograr lo mismo que Math.floor() (aunque, por supuesto, el método floor() es mucho más legible para la mayoría).

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

Parece se desea un color aleatorio - uno con cada aleatorio componente entre 0 y 255.

Math.random() devuelve un número aleatorio en [0,1) (es decir, puede ser exactamente cero o hasta pero sin incluir uno).

Al multiplicar ese valor aleatorio por 256, se obtiene un número aleatorio en el rango [0,256) (es decir, puede ser 255,99, pero nunca 256). Casi allí, pero no del todo.

Math.floor() redondea el número hacia abajo al entero entero más cercano, haciendo que el resultado sea un número entero en [0,255] como se desee.

1

Math.random devuelve valor entre 0 y 1. Lo está multiplicando por 256, por lo que devolverá un valor flotante entre 0 y 256. math.floor omitirá el valor de la fracción.

0

~~Number es solo el Math.floor() para números positivos. Para números negativos, es el Math.ceil().

Para números positivos que puede utilizar:

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

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

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

Para los números negativos que puede utilizar:

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

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

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