Jak*_*r00 89 java math modulo negative-number
我做模数错了吗?因为在Java -13 % 64
中应该评估,-13
但我得到51
.
Mar*_*ers 99
负数模数的两个定义都在使用 - 一些语言使用一个定义而另一个定义使用另一个定义.
如果您想获得负输入的负数,那么您可以使用:
int r = x % n;
if (r > 0 && x < 0)
{
r -= n;
}
Run Code Online (Sandbox Code Playgroud)
同样,如果您使用的语言在负面输入上返回负数,您会更喜欢正面:
int r = x % n;
if (r < 0)
{
r += n;
}
Run Code Online (Sandbox Code Playgroud)
Can*_*ner 70
由于"数学上"两者都是正确的:
-13 % 64 = -13 (on modulus 64)
-13 % 64 = 51 (on modulus 64)
Run Code Online (Sandbox Code Playgroud)
其中一个选项必须由Java语言开发人员选择,他们选择:
结果的符号等于股息的符号.
在Java规范中说:
https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17.3
您可以使用
(x % n) - (x < 0 ? n : 0);
Run Code Online (Sandbox Code Playgroud)