问题描述
我一直在使用%模,发现有些差异。谁能解释为什么会这样:
# 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,...