在 Scala 中,为什么余数 (%) 运算符会返回负数?
例如,将返回而不是 。(-3) % 2
-1
1
在Scala中获得正余数的首选方法是什么?如 、或 ?(((-3) % 2) + 2) % 2
abs(-3 % 2)
例如,将返回而不是 。(-3) % 2
-1
1
在Scala中获得正余数的首选方法是什么?如 、或 ?(((-3) % 2) + 2) % 2
abs(-3 % 2)
在 scala 中,为什么余数 (%) 运算符会返回负数?
模运算结果的符号有不同的约定;维基百科上有一篇很好的文章。Scala,像大多数但绝不是所有的编程语言一样,结果带有红利的标志(在你的情况下)。-3
在Scala中获得正余数的首选方法是什么?
我怀疑是否有普遍同意的首选方式;如果是我,要么使用Math.floorMod
,它给出的结果带有除数的符号(在您的示例中)而不是红利(这不仅意味着与具有不同符号的值相同,请参阅链接的JavaDoc以获取详细信息)。或者只是一个之后([在你的例子中,除数在哪里])。2
%
if
if (result < 0) { result += M; }
M
2
获得正模量的正确方法是将除数添加到负模量:
(-18 % 5) + 5
在这种情况下,取绝对值会给你错误的解决方案,尽管如果除数恰好是2,它将起作用。
如果你不知道股息的迹象,你可以做这样的事情:
((dividend % divisor) + divisor) % divisor