Hola, tenemos la solución a lo que buscas, has scroll y la verás a continuación.
Para algún número y
y algún divisor x
calcular el cociente (quotient
) y resto (remainder
) como:
var quotient = Math.floor(y/x);
var remainder = y % x;
No soy un experto en operadores bit a bit, pero aquí hay otra forma de obtener el número entero:
var num = ~~(a / b);
Esto también funcionará correctamente para números negativos, mientras que Math.floor()
girará en la dirección equivocada.
Esto también parece correcto:
var num = (a / b) >> 0;
Hice algunas pruebas de velocidad en Firefox.
-100/3 // -33.33..., 0.3663 millisec
Math.floor(-100/3) // -34, 0.5016 millisec
~~(-100/3) // -33, 0.3619 millisec
(-100/3>>0) // -33, 0.3632 millisec
(-100/3|0) // -33, 0.3856 millisec
(-100-(-100%3))/3 // -33, 0.3591 millisec
/* a=-100, b=3 */
a/b // -33.33..., 0.4863 millisec
Math.floor(a/b) // -34, 0.6019 millisec
~~(a/b) // -33, 0.5148 millisec
(a/b>>0) // -33, 0.5048 millisec
(a/b|0) // -33, 0.5078 millisec
(a-(a%b))/b // -33, 0.6649 millisec
Lo anterior se basa en 10 millones de ensayos para cada uno.
Conclusión: Utilizar (a/b>>0)
(o (~~(a/b))
o (a/b|0)
) para lograr una ganancia de alrededor del 20% en la eficiencia. También tenga en cuenta que todos ellos son incompatibles con Math.floor
Cuándo a/b<0 && a%b!=0
.
Aquí puedes ver las reseñas y valoraciones de los usuarios
Si guardas algún recelo o capacidad de aumentar nuestro crónica puedes añadir una acotación y con mucho gusto lo estudiaremos.