前言:Python中的默认整除所采用的是向下取整(round down),这也就导致了在处理负数的整除时会存在一些问题。而取余操作就是建立在整除的基础上的,从而导致这两种计算均存在问题。
默认向下(小)取整
>>> 10//3
3
# 这也就导致了在负数的整除过程中出现问题
>>> 10//-3
-4
# 这是因为真正的结果-3.3333在向下(小)取整时,变成了-4
取余的实现是建立在整除的基础上的
x % y = x − ( ( x / / y ) ∗ y ) x \% y = x-((x//y)*y) x%y=x−((x//y)∗y)
这个公式自己稍微想一下不难得出。但是由于//整除本就在处理负数时存在问题,所以在复数的取余同样存在问题。
>>> 10%3
1
>>> 10%-3
-2
## 这里的-2是因为10//-3=-4,从而10-12=-2