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?
Ich beschäftige mich auch mit negativem a und negativem n
//best perf, hard to read
function modul3(a,n){
r = a/n | 0 ;
if(a < 0){
r += n < 0 ? 1 : -1
}
return a - n * r
}
// shorter code
function modul(a,n){
return a%n + (a < 0 && Math.abs(n));
}
//beetween perf and small code
function modul(a,n){
return a - n * Math[n > 0 ? 'floor' : 'ceil'](a/n);
}
Es gibt ein NPM-Paket, das die Arbeit für Sie erledigt. Sie können es mit dem folgenden Befehl installieren.
npm install just-modulo --save
Verwendung aus der README kopiert
import modulo from 'just-modulo';
modulo(7, 5); // 2
modulo(17, 23); // 17
modulo(16.2, 3.8); // 17
modulo(5.8, 3.4); //2.4
modulo(4, 0); // 4
modulo(-7, 5); // 3
modulo(-2, 15); // 13
modulo(-5.8, 3.4); // 1
modulo(12, -1); // NaN
modulo(-3, -8); // NaN
modulo(12, 'apple'); // NaN
modulo('bee', 9); // NaN
modulo(null, undefined); // NaN
Das GitHub-Repository finden Sie unter dem folgenden Link:
https://github.com/angus-c/just/tree/master/packages/number-modulo
Zum Spaß gibt es hier eine "wrap"-Funktion, die ähnlich wie ein Modulo funktioniert, außer dass man auch den Mindestwert des Bereichs angeben kann (statt 0):
const wrap = (value = 0, min = 0, max = 10) =>
((((value - min) % (max - min)) + (max - min)) % (max - min)) + min;
Im Grunde genommen wird nur die echte Modulo-Formel so verrechnet, dass min
bei 0 landet, addiert dann min
danach wieder ein.
Nützlich, wenn Sie einen Wert haben, den Sie zwischen zwei Werten halten wollen.
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.