Kotlin负模数返回负值

时间:2017-11-23 11:56:30

标签: kotlin

Kotlin 中,我看到函数a.mod(n)如果a为负数,则结果为负数。这不是什么模数是要做的。我能做些什么来保持积极的模数?

例如:

(-2).mod(9)

返回-2,应为7

2 个答案:

答案 0 :(得分:6)

在版本中,kotlin 1.1 mod被弃用,因为它正在计算除法的余数,这可能是负数。这就是为什么他们改为rem,其功能名称更相似。如果你想在Kotlin和大多数语言中使用模数函数,你可以使用它:

r = (a).rem(n)
if (r < 0) r += n

答案 1 :(得分:2)

Paul Lammertsma在评论中提到,最好的答案是allow delete: if request.auth.uid==resource.data.User.uid allow read; allow create,update: if request.auth.uid!=null; ,因为它在数学上是最正确的:它始终返回介于零(含)和除数(不含)之间的值,并且无论是否其中一个参数或两个参数均为负数。

在翻转所有输入和输出的符号时甚至不变:

Math.floorMod()

Math.floorMod(11, 9) => 2 Math.floorMod(-11, -9) => -2 Math.floorMod(-11, 9) => 7 Math.floorMod(11, -9) => -7 从JDK 1.8开始可用。