1

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

# ruby
-123 % 10
> 7

-7 % 10
> 3

然后在Java中:

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

2 回答 2

1

发生这种情况是因为在 Java 中,模的结果具有相同的被除数符号。在 Ruby 中,它具有与除数相同的符号。来自Ruby 文档

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

或者,您可以使用remainder()执行相同操作的函数。

于 2020-11-10T15:22:35.333 回答
0

问题是 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-11-10T15:23:00.693 回答