java中%和floorMod()的区别
今天在阅读《java核心技术》的时候遇到了floormod()方法这个知识点,所以特此分析一下%和floormod的区别:
%是取余运算,floorMod()是取模运算。
————————————————————————————————————
- 取余计算方法:(设a,b为整数,c为中间的商值,r为最终结果)
a%b
(1)c=a/b //结果向0方向取整
(2)r=a-c×b - 取模计算方法:(设a,b为整数,c为中间的商值,r为最终结果)
floorMod(a,b)
(1)c=a/b //结果向无穷小方向取整
(2)r=a-c×b
————————————————————————————————————
区别:
取模运算在(1)时是向0方向取整
取模运算在(1)时是向无穷小方向取整
####对向0方向取整和向无穷小方向取整的理解:
例如:
10/-3=-3.333333,那么3.333333向0方向取整就等于-3
10/-3=-3.333333,那么3.333333向无穷小方向取整就等于-4
-10/3=-3.333333,那么3.333333向0方向取整就等于-3
-10/-3=-3.333333,那么3.333333向无穷小方向取整就等于-4
10/3=3.333333,那么3.333333向0方向取整就等于3
10/3=3.333333,那么3.333333向无穷小方向取整就等于3
-10/-3=3.333333,那么3.333333向0方向取整就等于3
-10/-3=3.333333,那么3.333333向无穷小方向取整就等于3
取余的结果正负和被除数相同
取模的结果正负和除数相同
代码验证:
public class YanZheng {
public static void main(String[] args) {
System.out.println("%的取余___________");
System.out.println(10/-3);
System.out.println(-10/3);
System.out.println(10/3);
System.out.println(10/-3);
System.out.println("floormod()的取模_____________");
System.out.println(Math.floorMod(10,-3));
System.out.println(Math.floorMod(-10,3));
System.out.println(Math.floorMod(10,3));
System.out.println(Math.floorMod(-10,-3));
}
}
代码结果:
%的取余___________
-3
-3
3
-3
floormod()的取模_____________
-2
2
1
-1