Javascript Modulo – % – Rest-Operator
Der Modulo- oder Rest-Operator % gibt den Rest einer ganzzahligen Division zurück – wenn ein Operand durch einen zweiten Operand geteilt wird. Wenn der erste Operand negativ ist, ist der Rückgabewert ebenfalls immer negativ, ist der erste Operand positiv, ist auch der Rückgabewert immer positiv.
Math.floor() / Math.trunc
Das Ergebnis der Division ist eine Gleitkommazahl, Math.floor() und Math.trunc() geben einen Integer zurück – z.B. 49 : 28 = 1.75 und Math.floor(1.75) = 1.
Die Math.floor sag also, wie oft der zweite Operand in den ersten Operand passt, der Modulo-Operator gibt den Rest zurück.
const x = 28; const y = 49; const quotient = Math.floor(y/x); // 1 const rest = y % x; // 21
Anstelle von Math.floor kann Math.trunc(y/x) genutzt werden.
const num = 77 % 12; // gibt 5 zurück const neg = -37 % 5; // gibt -2 zurück
Das Ergebnis hat das gleiche Vorzeichen wie der Dividend (links).Das unterscheidet sich vom klassischen mathematischen Modulo, der immer positiv ist.
Modulo Negativ, Positiv
Wenn der Dividend unendlich ist oder der Divisor 0 ist, ist das Ergebnis immer NaN.
Modulo Beispiele
Der Modulo-Operator kommt zum Einsatz, wenn getestet wird, ob eine Zahl gerade oder ungerade ist, ob ein Wert durch einen anderen Wert teilbar ist, beim zyklischen Inkrement / Dekrement (hoch- bzw. runterzählen) innerhalb eines Intervals.
So wird der %-Operator z.B. in einer Animation oder Simulation benutzt, wenn ein Winkel immer zwischen 0 und 360 Grad liegen muss.
Die Restwertfunktion rechnet Dezimalzahlen in Binär-, Hexadezimal- oder Oktalzahlen um (http://www.fachinformatikerwissen.de/pages/wis_grun_modu.shtml).
if (11 % 2 === 0) {
console.log ("gerade")
} else {
console.log ("ungerade")
}
Wiederkehrende Events behandeln
requestAnimationFrame ist eine JavaScript-Methode für das Steuern von Animationen, die aber – anders als setTimeout und setInterval – nicht direkt getaktet werden kann. Aber requestAnimationFrame bietet eine bessere Performance und Synchronisation mit dem Bildschirm-Rendering.
const interval = 5000; // Intervall in Millisekunden (2 Sekunden)
function repeatedEvent(currentTime) {
// 16ms ist ungefähr die Zeit für einen Frame bei 60fps
if (Math.floor(currentTime) % interval < 16) {
triggerEvent();
}
requestAnimationFrame(repeatedEvent);
}
function triggerEvent() {
const jetzt = new Date();
… Ausgabe …
}
requestAnimationFrame(repeatedEvent);
repeatedEvent verwendet Math.floor, um aktuelle Zeit auf ganze Sekunden zu reduzieren, und modulo, um auf 5 Sekunden zu takten.
Mit Modulo prüfen, ob eine Zahl eine Primzahl ist
Der Modulo-Operator wird häufig in Algorithmen zur Primzahlprüfung verwendet, um festzustellen, ob eine Zahl durch eine andere teilbar ist.
Modulo bei floats – Gleitkommazahlen
Anders als in den meisten Programmiersprachen funktioniert der %-Operator auch bei floating point numbers, also mit Gleitkommazahlen.
const rem = 7.5 % 2; // gibt 1.5 zurück console.log (rem)
Math.rem() – Reminder und Math.mod() – mathematisches Modulo
ES2023 hat neue Standardoperatoren auf dem Plan, dabei ein Math.rem(x,y), das sich genauso verhält wie %. Da geht es um die Konsistenz zu anderen mathematischen Funktionen.
Math.rem(x, y)
Auf dem Plan steht auch noch eine Modulo-Funktion, die sich wie das mathematische Modulo verhält. Bislang werden weder Math.rem() noch Math.mod() unterstüzt.
Math.mod(x, y)