1388 Stimmen

Wie kann man in JavaScript eine ganzzahlige Division durchführen und den Rest separat ermitteln?

En JavaScript wie bekomme ich:

  1. Wie oft geht eine bestimmte ganze Zahl in eine andere ein?
  2. Und der Rest?

1839voto

Mark Elliot Punkte 71774

Für eine bestimmte Anzahl y und einem Divisor x berechnen Sie den Quotienten ( quotient ) und Rest ( remainder ) als:

var quotient = Math.floor(y/x);
var remainder = y % x;

506voto

user113716 Punkte 309387

Ich bin kein Experte für bitweise Operatoren, aber hier ist ein anderer Weg, um die ganze Zahl zu erhalten:

var num = ~~(a / b);

Dies funktioniert auch bei negativen Zahlen, während Math.floor() wird in der falschen Richtung abgerundet.

Auch das scheint richtig zu sein:

var num = (a / b) >> 0;

303voto

KalEl Punkte 8477

Ich habe einige Geschwindigkeitstests mit Firefox durchgeführt.

-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

Die obigen Angaben beruhen auf jeweils 10 Millionen Versuchen.

Schlussfolgerung: Verwenden Sie (a/b>>0) (oder (~~(a/b)) o (a/b|0) ), um eine Effizienzsteigerung von etwa 20 % zu erreichen. Denken Sie auch daran, dass sie alle nicht mit Math.floor wenn a/b<0 && a%b!=0 .

270voto

Oriol Punkte 246798

ES6 führt die neue Math.trunc Methode. Dies ermöglicht die Festlegung @MarkElliot's Antwort damit es auch für negative Zahlen funktioniert:

var div = Math.trunc(y/x);
var rem = y % x;

Beachten Sie, dass Math Methoden haben gegenüber bitweisen Operatoren den Vorteil, dass sie mit Zahlen über 2 arbeiten 31 .

56voto

Wolf Elkan Punkte 641

Ich verwende normalerweise:

const quotient =  (a - a % b) / b;
const remainder = a % b;

Es ist wahrscheinlich nicht die eleganteste Lösung, aber sie funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X