首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin负模返回负值

Kotlin负模返回负值
EN

Stack Overflow用户
提问于 2017-11-23 11:56:30
回答 4查看 5.2K关注 0票数 17

Kotlin中,我已经看到对于函数a.mod(n),如果a是负的,则结果是负的。这不是模组应该做的。我该怎么做才能一直保持积极的模式呢?

例如:

代码语言:javascript
复制
(-2).mod(9)

返回-2,应该是7

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-11-23 11:56:30

在版本Kotlin1.1中,mod被废弃,因为它正在计算除法的其余部分,这可能是负数。这就是为什么他们改变为rem,更类似的名称,它的功能。如果您希望在Kotlin和大多数语言中使用一个模块化函数,您可以使用以下方法:

代码语言:javascript
复制
r = (a).rem(n)
if (r < 0) r += n
票数 12
EN

Stack Overflow用户

发布于 2019-09-08 15:25:59

最好的答案是Math.floorMod(),正如Paul在注释中提到的那样,因为它在数学上是最正确的:它总是返回零(包括)和除数(排它)之间的值,并且不管其中一个还是两个参数都是负值。

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

代码语言:javascript
复制
Math.floorMod(11, 9) => 2
Math.floorMod(-11, -9) => -2

Math.floorMod(-11, 9) => 7
Math.floorMod(11, -9) => -7

从JDK1.8开始就可以使用Math.floorMod了。

票数 17
EN

Stack Overflow用户

发布于 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/

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47455006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档