Java中百分号(%)运算符和IEEEremainder()方法有什么区别(如果有的话)?

5
在Java中,使用%运算符获取整数除法x / y的余数和使用Math.IEEEremainder(x,y)方法之间是否存在任何功能或性能差异?

请查看此链接:https://dev59.com/GHI-5IYBdhLWcg3wNla1 - Jose Antonio
请查看相关的JLS章节,其中有定义。(请参阅http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.17.3) - user207421
2个回答

10
除了John B指出的类型差异之外,语义上还有显着的差异。 Math.IEEEremainder(x,y) 返回x-n * y ,其中nx / y 最接近的整数(在平局的情况下取偶数),而x%y 返回x-n * y ,其中n x / y 的整数部分(即n 是将x / y 的真实值向零舍入而不是向最近整数舍入的结果)。
为了说明区别: Math.IEEEremainder(9.0,5.0)将是-1.0 ,因为 9.0 / 5.0 最接近的整数是 2 9.0-2 * 5.0 -1.0 。但是, 9.0%5.0 将是 4.0 ,因为 9.0 / 5.0 的整数部分是 1 ,而 9.0-1 * 5.0 4.0
这里是 Math.IEEEremainder 官方文档

1

Math.IEEEremainder 接受并返回 double,因此当您需要一个 double 结果时应使用它。如果要获取余数,使用 %,因为它会给出一个 int,比使用 double 运算更有效率。


两个浮点数之间进行取模运算得到的结果不可能是 int 类型,因为 NaN 是其中一个可能的结果 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接