我试图使用 Ruby 获取除法的余数。
假设我们要将 208 除以 11。
结果应该是"18,余数为10",而我最终需要的是10
。
到目前为止,这是我所拥有的代码,但在这种情况下(说余数是0
),它会出现问题。
division = 208.to_f / 11
rounded = (division*10).ceil/10.0
remainder = rounded.round(1).to_s.last.to_i
取模运算符:
> 208 % 11
=> 10
如果只需要整数部分,可以使用带有 /
运算符的整数或 Numeric#div
方法:
quotient = 208 / 11
#=> 18
quotient = 208.0.div 11
#=> 18
如果您只需要余数,请使用%
运算符或Numeric#modulo
方法:
modulus = 208 % 11
#=> 10
modulus = 208.0.modulo 11
#=> 10.0
如果您需要同时获得商和余数,请使用Numeric#divmod
方法。即使接收器或参数是浮点数,它也可以正常工作。quotient, modulus = 208.divmod(11)
#=> [18, 10]
208.0.divmod(11)
#=> [18, 10.0]
208.divmod(11.0)
#=> [18, 10.0]
另外一个有趣的方法是Numeric#remainder
方法。所有这些方法之间的差异可以在divmod
文档中看到。
请使用Numeric#remainder,因为mod不是余数。
取模运算:
5.modulo(3)
#=> 2
5.modulo(-3)
#=> -1
提醒:
5.remainder(3)
#=> 2
5.remainder(-3)
#=> 2
这是一个关于问题讨论的链接:https://rob.conery.io/2018/08/21/mod-and-remainder-are-not-the-same/
该链接解释了mod与remainder不同的问题,特别是在IT技术领域中常常混淆两者的概念。如果你想更好地理解这一点,阅读本链接将会对你有所帮助。11 = 3 mod 4
不包含运算符; mod
在这里不是运算符。它只是对于数字系统中的3
的描述。为了避免混淆,通常会写成11 = 3 (mod 4)
。 - Adam Sibik
Fixnum
类的一个方法:>> 208.%(11) #=> 10
。 - Michael Kohl5 + 5
实际上只是5.+(5)
的简写形式。 - fbonetti&
、|
、and
、not
以及一些其他的运算符都不是方法。 - Ben Aubin&
,|
是Fixnum
上的方法;它们不是运算符:http://ruby-doc.org/core-2.2.0/Fixnum.html#method-i-26。 - fbonetti