java中取余和取模的区别
前言
对整数a,b来说,取余和取模的计算过程相同:
- 求整数商 c = a/b
- 计算模或者余数 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
符合预期