我该如何在 Elixir 中使用取模运算符?
例如,在 Ruby 中你可以这样做:
5 % 2 == 0
它与 Ruby 的模运算符有何不同?
对于整数,请使用Kernel.rem/2
:
iex(1)> rem(5, 2)
1
iex(2)> rem(5, 2) == 0
false
来自文档:
计算整数除法的余数。
rem/2
使用截断除法,这意味着结果将始终具有被除数
的符号。如果其中一个参数不是整数,或者
除数
为0,则引发ArithmeticError
异常。
与Ruby相比主要的差异似乎是:
rem
仅适用于整数,但%
根据数据类型完全更改其行为。remainder
相同):Ruby:
irb(main):001:0> -5 / 2
=> -3
irb(main):002:0> -5 % 2
=> 1
irb(main):003:0> -5.remainder(2)
=> -1
Elixir:
iex(1)> -5 / 2
-2.5
iex(2)> rem(-5, 2)
-1
Elixir的rem
只是使用Erlang的rem
,因此这个相关的Erlang问题也可能有用。
使用rem/2
函数参见:https://hexdocs.pm/elixir/Kernel.html#rem/2
所以在Elixir中,您的示例变为:
rem(5,2) == 0
该函数返回false
。
顺便说一下,在Elixir中使用%
只是从该行开始注释代码到行末。
%
用作注释符号,而在Elixir中则使用#
。翻译后请勿添加解释或其他内容。 - Roman Boiko使用Integer.mod/2
,参见:https://hexdocs.pm/elixir/Integer.html#mod/2
iex>Integer.mod(-5, 2)
1
算术运算符
在 Elixir 中,我们可以使用各种算术运算符来执行基本数学运算。下表列出了可用的算术运算符及其功能:iex> 10 + 5 15 iex> 10 - 5 5 iex> 10 * 5 50 iex> 10 / 5 2.0 iex> div(10, 5) 2 iex> rem(10, 3) 1
注意,在进行除法时,如果两个操作数都是整数,则结果也将是整数。如果您需要浮点数结果,请至少将一个操作数转换为浮点数。 - Roger Lipscomberem
运算符是一个余数运算符,而不是模运算符。 - Penguin Brian