在Kotlin中,我看到函数a.mod(n)if a为负数,结果为负数.这不是什么模数是要做的.我能做些什么来保持积极的模数?
例如:
(-2).mod(9)
Run Code Online (Sandbox Code Playgroud)
回来-2,应该是7.
tre*_*ell 14
最好的答案是Math.floorMod()Paul Lammertsma 在评论中提到的,因为它在数学上是最正确的:它总是返回零(包含)和除数(不包含)之间的值,并且无论其中一个或两个参数是否为负,都会返回。
它甚至在翻转所有输入和输出的符号时都是不变的:
Math.floorMod(11, 9) => 2
Math.floorMod(-11, -9) => -2
Math.floorMod(-11, 9) => 7
Math.floorMod(11, -9) => -7
Run Code Online (Sandbox Code Playgroud)
Math.floorMod 自 JDK 1.8 起可用。
sba*_*ski 12
在 Kotlin 1.5 中,行为发生了变化,(-11).mod(9) == 7正如 OP 所期望的那样。一般来说, 的结果将与除数mod具有相同的符号。
注意运算符%仍然是rem,所以(-11) % 9 == -2。
来源:https ://blog.jetbrains.com/kotlin/2021/04/kotlin-1-5-0-rc-released/
在版本中,kotlin 1.1 mod已被弃用,因为它正在计算除法的余数,这可能是负数.这就是为什么他们改变了rem,更类似于它的功能.如果你想在Kotlin和大多数语言中使用模数函数,你可以使用:
r = (a).rem(n)
if (r < 0) r += n
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1121 次 |
| 最近记录: |