387 Stimmen

JavaScript % (modulo) ergibt ein negatives Ergebnis für negative Zahlen

Nach Angaben von Google-Rechner (-13) % 64 es 51 .

Laut Javascript (siehe dies JSBin ) es ist -13 .

Wie kann ich das beheben?

1voto

bormat Punkte 1191

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); 
    }

1voto

maartenpaauw Punkte 374

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

1voto

V. Rubinetti Punkte 889

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.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