为了可以成为测试,最近在学Python。菜鸟教程中叫%运算为取余,而之前我在学习Java时记得书上是叫%运算为取模。因此想知道这两者到底有啥区别。
一.定义
在matlab中,关于取余和取模是这么定义的:
当y≠0时:
取余:rem(x,y)=x-y * fix(x./y)
取模:mod(x,y)=x-y * floor(x./y)
其中,fix()函数是向0取整,floor()函数是向负无穷取整
取余,遵循尽可能让商向0靠近的原则
取模,遵循尽可能让商向负无穷靠近的原则
二.测试
我用Java和Python分别运行了5%3、-5%3...
- 5%3
5除以3=1.667产生了两个商1和2
如果%表示的是取余则rem(5,3)=5 - 3 * 1 = 2
如果%表示的是取模则mod(5,3) = 5 - 3 * 1 = 2
- -5%3
-5除以3=-1.667产生了两个商-1和-2
如果%表示的是取余则rem(5,3)= -5 - 3 * (-1) = -2
如果%表示的是取模则mod(5,3) = -5 - 3 * (-2) = 1
- 5%-3
5除以-3=-1.667产生了两个商-1和-2
如果%表示的是取余则rem(5,3)= 5 - (-3) * (-1) = 2
如果%表示的是取模则mod(5,3) = 5 - (-3) * (-2) = -1
- -5%-3
-5除以-3=1.667产生了两个商1和2
如果%表示的是取余则rem(5,3)= -5 - (-3) * 1 = -2
如果%表示的是取模则mod(5,3) = -5 - (-3) * 1 = -2
- JAVA
public static void main(String[] args) {
System.out.println("5 % 3 =" + 5 % 3);
System.out.println("-5 % 3 = " + -5 % 3);
System.out.println("5 % (-3) = " +5 % (-3));
System.out.println("-5 % (-3) = " + -5 % (-3));
}
// 输出结果
// 5 % 3 =2
// -5 % 3 = -2
// 5 % (-3) = 2
// 5 % (-3) = -2
- Python
>>> 5 % 3 # 取模
2
>>> -5 % 3
1
>>> 5 % -3
-1
>>> -5 % -3
-2
>>> 5.2 %3
2.2
>>> -5.2 % 3
0.7999999999999998
三.结论
由测试结果可得Python中的%为取模,Java的%才是取余。
网友评论