По гугл калькулятору (-13) % 64
есть 51
.
Согласно Javascript (см. Этот JSBin ) это так -13
.
Как это исправить?
javascript
math
modulo
Алек ущелье
источник
источник
(-13) % 64
или-(13 % 64)
? Лично я бы поставил паренсы в любом случае, просто для большей ясности.%
не является оператором по модулю. Это оператор остатка. В JavaScript нет оператора по модулю. Таким образом, принятый ответ - путь.Ответы:
Взято из этой статьи: JavaScript Modulo Bug
источник
x < -n
- например,(-7 + 5) % 5 === -2
но((-7 % 5) + 5) % 5 == 3
.Использование
Number.prototype
является МЕДЛЕННЫМ, потому что каждый раз, когда вы используете метод-прототип, ваш номер заключен вObject
. Вместо этого:Использование:
Смотрите: http://jsperf.com/negative-modulo/2
~ 97% быстрее, чем при использовании прототипа. Если производительность важна для вас, конечно ..
источник
n
с иm
S вокруг неправильно в вашем втором примере @StuR. Так и должно бытьreturn ((n % m) + m) % m;
.%
Оператор в JavaScript оператор остальное, а не оператор по модулю (главное отличие заключается в том , как отрицательные числа обрабатываются):-1 % 8 // -1, not 7
источник
remainder
, он должен быть больше 0 по определению. Разве вы не помните теорему о делении из средней школы ?! Поэтому, может быть, вы можете посмотреть здесь: en.wikipedia.org/wiki/Euclidean_divisionФункция «мод» для возврата положительного результата.
И конечно
источник
#sec-applying-the-mod-operator
прямо в URL :) В любом случае, спасибо за примечание, я убрал пух из своего ответа, это не очень важно в любом случае.Принятый ответ заставляет меня немного нервничать, потому что он снова использует оператор%. Что если Javascript изменит поведение в будущем?
Вот обходной путь, который не использует%:
источник
-
,*
,/
,;
,.
,(
,)
,,
,Math.floor
,function
илиreturn
изменения? Тогда ваш код ужасно сломан.Хотя он не ведет себя так, как вы ожидали, это не значит, что JavaScript не «ведет себя». Это выбор JavaScript, сделанный для его вычисления по модулю. Потому что по определению любой ответ имеет смысл.
Смотрите это из Википедии. Справа видно, как разные языки выбрали знак результата.
источник
Если
x
это целое число иn
степень 2, вы можете использоватьx & (n - 1)
вместоx % n
.источник
Таким образом, кажется, что если вы пытаетесь модовать около градусов (то есть, если у вас -50 градусов - 200 градусов), вы захотите использовать что-то вроде:
источник
Я имею дело с отрицательным а и отрицательным п тоже
источник
Это не ошибка, есть 3 функции для вычисления по модулю, вы можете использовать ту, которая соответствует вашим потребностям (я бы рекомендовал использовать евклидову функцию)
Усечение функции десятичной части
Целочисленная часть функции
Евклидова функция
источник
%
могут возвращаться отрицательные результаты (и это цель этих функций, чтобы исправить это)parseInt(-41).mod(-7)
вернулось бы-6
вместо1
(и это точно цель функции части Integer, которую я написал)Существует пакет NPM, который сделает всю работу за вас. Вы можете установить его с помощью следующей команды.
npm install just-modulo --save
Использование скопировано из README
GitHub репозиторий можно найти по следующей ссылке:
https://github.com/angus-c/just/tree/master/packages/number-modulo
источник