Elixir中的模运算符

dan*_*son 4 elixir modulo

如何在Elixir中使用模运算符?

例如,在Ruby中,您可以执行以下操作:

5 % 2 == 0
Run Code Online (Sandbox Code Playgroud)

它与Ruby的模运算符有何不同?

Ada*_*hip 13

对于整数,请使用Kernel.rem/2

iex(1)> rem(5, 2)
1
iex(2)> rem(5, 2) == 0
false
Run Code Online (Sandbox Code Playgroud)

从文档:

计算整数除法的余数。

rem/2使用截断除法,这意味着结果将始终具有 的符号dividend

ArithmeticError如果其中一个参数不是整数,或者divisor是 0 ,则引发异常。

与 Ruby 相比的主要区别似乎是:

  1. rem仅适用于整数,但%完全根据数据类型改变其行为。
  2. Elixir 中负股息的符号为负(与 Ruby 相同remainder):

红宝石:

irb(main):001:0> -5 / 2
=> -3
irb(main):002:0> -5 % 2
=> 1
irb(main):003:0> -5.remainder(2)
=> -1
Run Code Online (Sandbox Code Playgroud)

长生不老药:

iex(1)> -5 / 2
-2.5
iex(2)> rem(-5, 2)
-1
Run Code Online (Sandbox Code Playgroud)

Elixir'srem只使用 Erlang's rem,所以这个相关的 Erlang 问题也可能有用。


Gav*_*aff 5

使用rem/2请参阅:https : //hexdocs.pm/elixir/Kernel.html#rem/2 因此,在Elixir中,您的示例变为:

rem(5,2) == 0
Run Code Online (Sandbox Code Playgroud)

哪个返回 false

顺便说一句,您% 在Elixir中使用的内容只是在行尾添加了注释。

  • `%` 在 Erlang 中开始注释,而不是在 Elixir 中。Elixir 为此使用“#”。 (2认同)