000697 Java中取余(%)和取模(Math.floorMod)的区别
Math.floorMod(+4, -3) == -2; (+4 % -3) == +1 Math.floorMod(-4, +3) == +2; (-4 % +3) == -1 Math.floorMod(-4, -3) == -1; (-4 % -3) == -1 Math.floorMod(+4, +3) == +1; (+4 % +3) == +1;
取模 Math.floorMod(a , b);
取余 a % b;
在matlab中,关于取余和取模是这么定义的:
当y≠0时:
取余:rem(x,y)=x-y.*fix(x./y)
取模:mod(x,y)=x-y.*floor(x./y)
其中,fix()函数是向0取整,floor()函数是向负无穷取整
例如: 4 / (-3) 约等于-1.3
在取余运算时候商值向0方向舍弃小数位于是fix(-1.3) = -1
取余结果 : 4 - (-3)(-1) = 1
在取模运算时商值向负无穷方向舍弃小数位于是 floor(-1.3) = -2
取模结果 : 4 - (-3)(-2) = -2
总结
1、取余和取模在除数和被除数同为正数或者同为负数时没有区别;
2、取余的结果和被除数同号,取余运算结果向0方向舍弃小数位;
3、取模的结果和除数同号,取模运算结果向负无穷方向舍弃小数位(尽可能让商更小)
口诀 百分取余被除0, mod取模除负舍