【问题标题】:Discrepancies in Ruby vs Java when using modulo % [duplicate]使用模 % 时 Ruby 与 Java 的差异 [重复]
【发布时间】:2020-11-10 15:16:34
【问题描述】:

我一直在使用模 %,但我注意到了一些差异。谁能解释一下为什么会这样:

# ruby
-123 % 10
> 7

-7 % 10
> 3

然后在 Java 中:

// Java
System.out.println(-123 % 10); // -3
System.out.println(-7 % 10);   // -7

【问题讨论】:

  • 因为它不是真正的模数,而是Java中的余数运算符stackoverflow.com/questions/90238/…
  • 在数学上,模运算 mod n 将数字拆分为等价类 [z]z 通常介于 0 和 n 之间(不包括)。在处理负数时,在mod 10 的情况下,您可以使用等于[-3] == [7] 的负数。因此,从数学上讲,两者都可以被视为正确的。只是计算方式不同。

标签: java ruby mod


【解决方案1】:

这是因为在 Java 中取模的结果具有相同的除数符号。在 Ruby 中,它具有与除数相同的符号。 来自Ruby documentation

x.modulo(y) means x-y*(x/y).floor

您也可以使用 remainder() 函数来做同样的事情。

【讨论】:

    【解决方案2】:

    问题是 Java 找到与模结果不同的余数。 Ruby 从无限数中找出最不积极的结果。因此,如果将模数 (10) 添加到 Java 结果中,它们将是相同的。

    模运算表明x congruent to m mod(n) 存在一个整数k 使得x - m = kn

    剩余 - -123 % 10 = -3
    模数 - x = -123 % 10 所以 x + 123 = 10k 其中k 是某个整数。所以 x 可以是 ...,-23, -13, -3 ,7, 17, 27, ... 中的任何一个

     
    

    【讨论】:

      猜你喜欢
      • 2020-06-21
      • 1970-01-01
      • 2017-11-26
      • 2015-03-26
      • 2019-03-22
      • 2013-07-06
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多