y%x = y - (y/x)*x
math.fmod(y,x) = y - (y/x)*x
只是y/x(商)的取值方式各有不同: y%x运算总是将y/x的值向下取整,而math.fmod(y,x)是将y/x的值向0取整。
举例:
1)-2%3 = -2 - (-2/3)*3
= -2 - math.floor(-2/3)*3
= -2 - math.floor(-0.666666666)*3
= -2 - (-1)*3
= 1
所以-2%3得到的商是math.floor(-2/3)=-1,余数为1
3%-2 = 3 - (3/-2)*(-2)
= 3 - math.floor(3/-2)*(-2)
= 3 - (-2)*(-2)
= 3 - 4
= -1
所以3%-2得到的商是math.floor(3/-2)=-2,余数为-1
2)math.fmod(-2,3) = -2 - (-2/3)*3
= -2 - math.ceil(-2/3)*3
= -2 - 0*3
= -2
所以math.fmod(-2,3)得到的商是math.ceil(-2/3)=0,余数-2
math.fmod(3,-2) = 3 - (3/-2)*(-2)
= 3 - math.ceil(3/-2)*(-2)
= 3 - (-1)*(-2)
= 1
所以math.fmod(3,-2)得到的商是math.ceil(3/-2)=-1,余数1
math.fmod(15,6) = 15 - (15/6)*6
= 15 - math.floor(15/6)*6
= 15 - 2*6
= 3
所以math.fmod(15,6)得到的商是math.floor(15/6)=2,余数3
https://blog.csdn.net/sunline_wanghj/article/details/79490986参考