Integer-Division mit Rest in JavaScript?


6 Answers

Ich bin kein Experte in bitweisen Operatoren, aber hier ist ein anderer Weg, um die ganze Nummer zu bekommen:

var num = ~~(a / b);

Dies funktioniert auch für negative Zahlen, während Math.floor() in die falsche Richtung läuft.

Das scheint auch richtig zu sein:

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

In JavaScript, wie bekomme ich:

  1. wie oft eine gegebene ganze Zahl in eine andere geht?
  2. der Rest?



Die Anzahl der Seiten kann in einem Schritt berechnet werden: Math.ceil (x / y)




Sie können ternär verwenden, um zu entscheiden, wie mit positiven und negativen Ganzzahlwerten umzugehen ist.

var myInt = (y > 0) ? Math.floor(y/x) : Math.floor(y/x) + 1

Wenn die Zahl positiv ist, ist alles in Ordnung. Wenn die Zahl negativ ist, wird 1 hinzugefügt, weil Math.floor mit Negativen umgeht.




Math.floor(operation) gibt den abgerundeten Wert der Operation zurück.

Beispiel für eine erste Frage:

var x = 5;
var y = 10.4;
var z = Math.floor(x + y);

console.log(z);

Konsole:

15

Beispiel für die zweite Frage:

var x = 14;
var y = 5;
var z = Math.floor(x%y);

console.log(x);

Konsole:

4




Dies wird immer gegen Null abgeschnitten. Nicht sicher, ob es zu spät ist, aber hier geht es:

function intdiv(dividend, divisor) { 
    divisor = divisor - divisor % 1;
    if (divisor == 0) throw new Error("division by zero");
    dividend = dividend - dividend % 1;
    var rem = dividend % divisor;
    return { 
        remainder: rem, 
        quotient: (dividend - rem) / divisor
    };
}



Sie können die Funktion parseInt , um ein abgeschnittenes Ergebnis zu erhalten.

parseInt(a/b)

Um einen Rest zu erhalten, benutze mod operator:

a%b

parseInt haben einige Fallstricke mit Strings, um radix Parameter mit Basis 10 zu vermeiden

parseInt("09", 10)

In einigen Fällen kann die String-Darstellung der Zahl eine wissenschaftliche Notation sein, in diesem Fall wird parseInt ein falsches Ergebnis liefern.

parseInt(100000000000000000000000000000000, 10) // 1e+32

Dieser Aufruf erzeugt 1 als Ergebnis.




ES6 führt die neue Math.trunc Methode ein. Dies ermöglicht es, @ MarkElliots Antwort zu korrigieren , damit es auch für negative Zahlen funktioniert:

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

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






Related