Selon Google Calculator (-13) % 64
est 51
.
Selon Javascript (voir ce JSBin ) c'est le cas -13
.
Comment puis-je réparer ça?
javascript
math
modulo
Gorges d'Alec
la source
la source
(-13) % 64
ou-(13 % 64)
? Personnellement, je mettrais les parens de toute façon, juste pour plus de clarté.%
n'est pas l'opérateur modulo. C'est l'opérateur restant. Il n'y a pas d'opérateur modulo en JavaScript. La réponse acceptée est donc la voie à suivre.Réponses:
Tiré de cet article: Le bogue JavaScript Modulo
la source
x < -n
- par exemple,(-7 + 5) % 5 === -2
mais((-7 % 5) + 5) % 5 == 3
.L'utilisation
Number.prototype
est LENTE, car chaque fois que vous utilisez la méthode prototype, votre numéro est enveloppé dans unObject
. Au lieu de cela:Utilisation:
Voir: http://jsperf.com/negative-modulo/2
~ 97% plus rapide que l'utilisation d'un prototype. Si les performances sont importantes pour vous, bien sûr ..
la source
n
s etm
s autour de la mauvaise façon dans votre deuxième exemple @StuR. Ça devrait l'êtrereturn ((n % m) + m) % m;
.L'
%
opérateur en JavaScript est l'opérateur restant, pas l'opérateur modulo (la principale différence étant la façon dont les nombres négatifs sont traités):-1 % 8 // -1, not 7
la source
remainder
, il doit être supérieur à 0 par définition. Vous ne vous souvenez pas du théorème de division du lycée?! Alors peut-être que vous pouvez jeter un œil ici: en.wikipedia.org/wiki/Euclidean_divisionUne fonction "mod" pour retourner un résultat positif.
Et bien sûr
la source
#sec-applying-the-mod-operator
juste ici dans l'url :) Quoi qu'il en soit, merci pour la note, j'ai retiré le fluff de ma réponse, ce n'est pas vraiment important de toute façon.La réponse acceptée me rend un peu nerveux car il réutilise l'opérateur%. Et si Javascript change le comportement à l'avenir?
Voici une solution de contournement qui ne réutilise pas%:
la source
-
,*
,/
,;
,.
,(
,)
,,
,Math.floor
,function
ou desreturn
changements? Ensuite, votre code est horriblement cassé.Bien qu'il ne se comporte pas comme prévu, cela ne signifie pas que JavaScript ne se comporte pas. C'est un choix que JavaScript a fait pour son calcul modulo. Parce que, par définition, chaque réponse a du sens.
Voir cela sur Wikipedia. Vous pouvez voir à droite comment différentes langues ont choisi le signe du résultat.
la source
Si
x
est un entier et an
une puissance de 2, vous pouvez utiliser à lax & (n - 1)
place dex % n
.la source
Il semble donc que si vous essayez de modifier les degrés (de sorte que si vous avez -50 degrés - 200 degrés), vous voudriez utiliser quelque chose comme:
la source
Je gère aussi le négatif a et le négatif n
la source
Ce n'est pas un bug, il y a 3 fonctions pour calculer le modulo, vous pouvez utiliser celle qui correspond à vos besoins (je recommanderais d'utiliser la fonction euclidienne)
Tronquer la fonction de partie décimale
Fonction de partie entière
Fonction euclidienne
la source
%
peut retourner des résultats négatifs (c'est le but de ces fonctions, pour y remédier)parseInt(-41).mod(-7)
reviendrait-6
au lieu de1
(et c'est exactement le but de la fonction de partie entière que j'ai écrite)Il existe un package NPM qui fera le travail pour vous. Vous pouvez l'installer avec la commande suivante.
npm install just-modulo --save
Utilisation copiée à partir du fichier README
Le référentiel GitHub peut être trouvé via le lien suivant:
https://github.com/angus-c/just/tree/master/packages/number-modulo
la source