Saltar al contenido

¿División entera con resto en JavaScript?

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.floorCuá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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *