Laut Google Calculator (-13) % 64
ist 51
.
Laut Javascript (siehe diese JSBin ) ist es -13
.
Wie behebe ich das?
javascript
math
modulo
Alec-Schlucht
quelle
quelle
(-13) % 64
oder-(13 % 64)
? Persönlich würde ich die Parens so oder so einsetzen, nur um zusätzliche Klarheit zu schaffen.%
nicht der Modulo-Operator ist. Es ist der Restoperator. In JavaScript gibt es keinen Modulo-Operator. Die akzeptierte Antwort ist also der richtige Weg.Antworten:
Entnommen aus diesem Artikel: Der JavaScript Modulo Bug
quelle
x < -n
- zB(-7 + 5) % 5 === -2
aber((-7 % 5) + 5) % 5 == 3
.Die Verwendung
Number.prototype
ist LANGSAM, da Ihre Nummer jedes Mal, wenn Sie die Prototypmethode verwenden, in eine eingeschlossen wirdObject
. An Stelle von:Verwenden:
Siehe: http://jsperf.com/negative-modulo/2
~ 97% schneller als bei Verwendung eines Prototyps. Wenn Leistung für Sie natürlich wichtig ist ..
quelle
n
s undm
s in Ihrem zweiten Beispiel @StuR falsch herum. Es sollte seinreturn ((n % m) + m) % m;
.Der
%
Operator in JavaScript ist der Restoperator, nicht der Modulo-Operator (der Hauptunterschied besteht darin, wie negative Zahlen behandelt werden):-1 % 8 // -1, not 7
quelle
remainder
, muss es per Definition größer als 0 sein. Kannst du dich nicht an den Teilungssatz von der High School erinnern ?! Vielleicht können Sie hier einen Blick darauf werfen: en.wikipedia.org/wiki/Euclidean_divisionEine "Mod" -Funktion, um ein positives Ergebnis zurückzugeben.
Und natürlich
quelle
#sec-applying-the-mod-operator
genau dort in der URL :) Wie auch immer, danke für den Hinweis, ich habe den Flaum aus meiner Antwort genommen, es ist sowieso nicht wirklich wichtig.Die akzeptierte Antwort macht mich etwas nervös, weil sie den% -Operator wiederverwendet. Was ist, wenn Javascript das Verhalten in Zukunft ändert?
Hier ist eine Problemumgehung, bei der% nicht wiederverwendet wird:
quelle
-
,*
,/
,;
,.
,(
,)
,,
,Math.floor
,function
oderreturn
Änderungen? Dann ist dein Code schrecklich kaputt.Obwohl es sich nicht wie erwartet verhält, bedeutet dies nicht, dass sich JavaScript nicht "verhält". Es ist ein JavaScript, das für die Modulo-Berechnung ausgewählt wurde. Denn per Definition macht jede Antwort Sinn.
Siehe dies aus Wikipedia. Sie können rechts sehen, wie verschiedene Sprachen das Vorzeichen des Ergebnisses ausgewählt haben.
quelle
Wenn
x
es sich um eine Ganzzahl und eine Zweierpotenzn
handelt, können Siex & (n - 1)
anstelle von verwendenx % n
.quelle
Wenn Sie also versuchen, um Grad zu modifizieren (wenn Sie also -50 Grad - 200 Grad haben), möchten Sie Folgendes verwenden:
quelle
Ich beschäftige mich auch mit negativem a und negativem n
quelle
Dies ist kein Fehler, es gibt 3 Funktionen zur Berechnung von Modulo. Sie können diejenige verwenden, die Ihren Anforderungen entspricht (ich würde empfehlen, die euklidische Funktion zu verwenden).
Abschneiden der Dezimalteilfunktion
Ganzzahlige Teilfunktion
Euklidische Funktion
quelle
%
kann negative Ergebnisse zurückgeben (und dies ist der Zweck dieser Funktionen, um es zu beheben)parseInt(-41).mod(-7)
würde-6
statt1
(und das ist genau der Zweck der Integer-Teil-Funktion, die ich geschrieben habe)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-Datei kopiert
Das GitHub-Repository finden Sie über den folgenden Link:
https://github.com/angus-c/just/tree/master/packages/number-modulo
quelle