Nach Angaben von Google-Rechner (-13) % 64
es 51
.
Laut Javascript (siehe dies JSBin ) es ist -13
.
Wie kann ich das beheben?
Nach Angaben von Google-Rechner (-13) % 64
es 51
.
Laut Javascript (siehe dies JSBin ) es ist -13
.
Wie kann ich das beheben?
Number.prototype.mod = function (n) {
"use strict";
return ((this % n) + n) % n;
};
Diesem Artikel entnommen: Der JavaScript-Modulo-Bug
Verwendung von Number.prototype
ist LANGSAM, denn jedes Mal, wenn Sie die Prototyp-Methode verwenden, wird Ihre Zahl in eine Object
. Stattdessen:
Number.prototype.mod = function(n) {
return ((this % n) + n) % n;
}
Verwendung:
function mod(n, m) {
return ((n % m) + m) % m;
}
Ver: http://jsperf.com/negative-modulo/2
~97% schneller als bei Verwendung des Prototyps. Wenn Leistung für Sie natürlich wichtig ist
Eine "mod"-Funktion, die ein positives Ergebnis liefert.
var mod = function (n, m) {
var remain = n % m;
return Math.floor(remain >= 0 ? remain : remain + m);
};
mod(5,22) // 5
mod(25,22) // 3
mod(-1,22) // 21
mod(-2,22) // 20
mod(0,22) // 0
mod(-1,22) // 21
mod(-21,22) // 1
Und natürlich
mod(-13,64) // 51
Die akzeptierte Antwort macht mich ein wenig nervös, weil sie den %-Operator wieder verwendet. Was ist, wenn Javascript das Verhalten in der Zukunft ändert?
Hier ist eine Umgehung, bei der % nicht wiederverwendet wird:
function mod(a, n) {
return a - (n * Math.floor(a/n));
}
mod(1,64); // 1
mod(63,64); // 63
mod(64,64); // 0
mod(65,64); // 1
mod(0,64); // 0
mod(-1,64); // 63
mod(-13,64); // 51
mod(-63,64); // 1
mod(-64,64); // 0
mod(-65,64); // 63
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.