java中取余和取模的区别

前言

对整数a,b来说,取余和取模的计算过程相同:

  1. 求整数商 c = a/b
  2. 计算模或者余数 r = a-c*b

区别在于第一步求商的方法:

  • 取余运算,结果向0方向舍入
  • 取模运算,结果向负无穷方向舍入

当a和b符号相同时,取余和取模结果没有区别,符号不同时,结果不一致,取余结果的符号和a相同,取模结果的符号和b相同。以下面计算为例

-7 % 3

得到的浮点数商为 -2.333 左右,取余尽可能向0靠近,商为-2,取模尽可能向负无穷靠近,商为-3,所以取余结果为

-7-(-2)*3=-7-(-6)=-1

取模结果为

-7-(-3)*3=-7-(-9)=2

java,kotlin中的%为取余,python的%为取模。

java测试

java中也提供了取模的方法,Math.floorMod()。

public class TestMod {

  public static void main(String[] args) {
    System.out.println("=====取余");
    System.out.println(7 % 3);
    System.out.println(7 % -3);
    System.out.println(-7 % 3);
    System.out.println(-7 % -3);
    System.out.println("=====取模");
    System.out.println(Math.floorMod(7, 3));
    System.out.println(Math.floorMod(7, -3));
    System.out.println(Math.floorMod(-7, 3));
    System.out.println(Math.floorMod(-7, -3));
  }

}

输出结果为

=====取余
1
1
-1
-1
=====取模
1
-2
2
-1

符合预期

参考

编程语言中,取余和取模的区别到底是什么?
Java 中的取模和取余
java中的%取模

posted @ 2021-07-28 18:38  strongmore  阅读(2303)  评论(0编辑  收藏  举报