在Kotlin中,我已经看到对于函数a.mod(n),如果a是负的,则结果是负的。这不是模组应该做的。我该怎么做才能一直保持积极的模式呢?
例如:
(-2).mod(9)返回-2,应该是7。
发布于 2017-11-23 11:56:30
在版本Kotlin1.1中,mod被废弃,因为它正在计算除法的其余部分,这可能是负数。这就是为什么他们改变为rem,更类似的名称,它的功能。如果您希望在Kotlin和大多数语言中使用一个模块化函数,您可以使用以下方法:
r = (a).rem(n)
if (r < 0) r += n发布于 2019-09-08 15:25:59
最好的答案是Math.floorMod(),正如Paul在注释中提到的那样,因为它在数学上是最正确的:它总是返回零(包括)和除数(排它)之间的值,并且不管其中一个还是两个参数都是负值。
在翻转所有输入和输出的符号时,它甚至是不变的:
Math.floorMod(11, 9) => 2
Math.floorMod(-11, -9) => -2
Math.floorMod(-11, 9) => 7
Math.floorMod(11, -9) => -7从JDK1.8开始就可以使用Math.floorMod了。
发布于 2021-11-30 18:26:59
在Kotlin1.5中,行为发生了变化,(-11).mod(9) == 7与OP预期的一样。通常,mod的结果将具有与除数相同的符号。
注意,操作符%仍然是rem,所以是(-11) % 9 == -2。
来源:https://blog.jetbrains.com/kotlin/2021/04/kotlin-1-5-0-rc-released/
https://stackoverflow.com/questions/47455006
复制相似问题