【问题标题】:How to find remainder of a division in Ruby?如何在 Ruby 中找到除法的余数?
【发布时间】:2018-12-31 21:37:45
【问题描述】:

我正在尝试使用 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

【问题讨论】:

    标签: ruby math


    【解决方案1】:

    模运算符:

    > 208 % 11
    => 10
    

    【讨论】:

    • 我怎么把它弄得这么复杂?谢谢。
    • 我不想吹毛求疵,但它不是运算符,而是Fixnum类的方法:>> 208.%(11) #=> 10
    • @MichaelKohl 从技术上讲,所有红宝石“运算符”都是方法。例如,5 + 5 实际上只是 5.+(5) 的简写。
    • @fbonetti not all...&|andnot 和其他一些运算符不是方法。
    • @penne12 这并不完全正确。 &|Fixnum 上的方法;他们不是运营商:ruby-doc.org/core-2.2.0/Fixnum.html#method-i-26.
    【解决方案2】:

    如果您只需要整数部分,请使用带有/ 运算符或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 方法也很有趣。所有这些之间的差异都可以在documentation for divmod 中看到。

    【讨论】:

    • divmod 方法正是我正在寻找的,需要余数和整数部分。
    【解决方案3】:

    请使用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/

    【讨论】:

    • 我完全不同意余数和模数有唯一定义的说法。编程语言中有一些实现——代数中的模是相关的,但不一样。请注意,代数中的 11 = 3 mod 4,而不是 11 mod 4 = 3。
    • 我必须不同意@Zane 的上述说法。在代数中,表达式11 = 3 mod 4 不包含运算符;mod 在这里不是运算符。这只是3 的数字系统的描述。为了避免混淆,它甚至通常写成11 = 3 (mod 4)
    • @AdamSibik。我不知道你为什么认为你“必须不同意”。在我看来,您的评论支持了这种说法:没有唯一的定义。
    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 2015-01-17
    • 2016-08-11
    相关资源
    最近更新 更多