Для целых чисел используйте Kernel.rem/2
:
iex(1)> rem(5, 2)
1
iex(2)> rem(5, 2) == 0
false
Из документов:
Вычисляет остаток от целочисленного деления.
rem/2
использует усеченное деление, что означает, что результат всегда будет иметь знак dividend
.
Вызывает исключение ArithmeticError
, если один из аргументов не является целым числом, или когдаdivisor
равно 0.
Основные различия по сравнению с Ruby:
rem
работает только с целыми числами, но %
меняет свое поведениеполностью зависит от типа данных. - Знак отрицательный для отрицательных дивидендов в эликсире (такой же, как у Руби
remainder
):
Рубин:
irb(main):001:0> -5 / 2
=> -3
irb(main):002:0> -5 % 2
=> 1
irb(main):003:0> -5.remainder(2)
=> -1
Эликсир:
iex(1)> -5 / 2
-2.5
iex(2)> rem(-5, 2)
-1
Эликсир rem
просто использует rem
Эрланга, поэтому этот связанный вопрос Эрланга также может быть полезен.