De acuerdo con Google Calculator (-13) % 64
es 51
.
De acuerdo con Javascript (ver este JSBin ) lo es -13
.
¿Cómo puedo solucionar esto?
javascript
math
modulo
Garganta de Alec
fuente
fuente
(-13) % 64
o-(13 % 64)
? Personalmente, pondría a los padres de cualquier manera, solo para mayor claridad.%
no es el operador de módulo. Es el operador restante. No hay operador de módulo en JavaScript. Entonces la respuesta aceptada es el camino a seguir.Respuestas:
Tomado de este artículo: El error del módulo de JavaScript
fuente
x < -n
ejemplo,(-7 + 5) % 5 === -2
pero((-7 % 5) + 5) % 5 == 3
.El uso
Number.prototype
es LENTO, porque cada vez que usa el método prototipo, su número se envuelve en unObject
. En lugar de esto:Utilizar:
Ver: http://jsperf.com/negative-modulo/2
~ 97% más rápido que usar un prototipo. Si el rendimiento es importante para usted, por supuesto ...
fuente
n
s ym
S en todo el camino equivocado en su segundo ejemplo @StuR. Debería serreturn ((n % m) + m) % m;
.El
%
operador en JavaScript es el operador restante, no el operador de módulo (la principal diferencia radica en cómo se tratan los números negativos):-1 % 8 // -1, not 7
fuente
remainder
, debe ser mayor que 0 por definición. ¿No puedes recordar el teorema de división de la escuela secundaria? Así que quizás puedas echar un vistazo aquí: en.wikipedia.org/wiki/Euclidean_divisionUna función "mod" para devolver un resultado positivo.
Y por supuesto
fuente
#sec-applying-the-mod-operator
allí mismo en la URL :) De todos modos, gracias por la nota, eliminé mi respuesta, de todos modos no es realmente importante.La respuesta aceptada me pone un poco nervioso porque reutiliza el operador%. ¿Qué pasa si Javascript cambia el comportamiento en el futuro?
Aquí hay una solución alternativa que no reutiliza%:
fuente
-
,*
,/
,;
,.
,(
,)
,,
,Math.floor
,function
oreturn
cambios? Entonces tu código está horriblemente roto.Aunque no se está comportando como esperaba, no significa que JavaScript no se esté "comportando". Es una elección de JavaScript para su cálculo de módulo. Porque, por definición, cualquier respuesta tiene sentido.
Vea esto de Wikipedia. Puede ver a la derecha cómo los diferentes idiomas eligieron el signo del resultado.
fuente
Si
x
es un número entero yn
es una potencia de 2, puede usarlo enx & (n - 1)
lugar dex % n
.fuente
Entonces, parece que si está tratando de modificar los grados (de modo que si tiene -50 grados - 200 grados), querría usar algo como:
fuente
Me ocupo de lo negativo y negativo también
fuente
Esto no es un error, hay 3 funciones para calcular el módulo, puede usar la que se ajuste a sus necesidades (recomendaría usar la función euclidiana)
Truncar la función de la parte decimal
Función de parte entera
Función euclidiana
fuente
%
puede devolver resultados negativos (y este es el propósito de estas funciones, solucionarlo)parseInt(-41).mod(-7)
regresaría en-6
lugar de1
(y este es exactamente el propósito de la función de parte entera que escribí)Hay un paquete NPM que hará el trabajo por usted. Puede instalarlo con el siguiente comando.
npm install just-modulo --save
Uso copiado del archivo README
El repositorio de GitHub se puede encontrar a través del siguiente enlace:
https://github.com/angus-c/just/tree/master/packages/number-modulo
fuente