使用%模时Ruby vs Java中的差异

问题描述

我一直在使用%模,发现有些差异。谁能解释为什么会这样:

# ruby
-123 % 10
> 7

-7 % 10
> 3

然后用Java:

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

解决方法

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

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

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

,

问题在于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,...

中的任何一个