Python如何获取截断取模与向下取整取模的运算结果
Python 截断取模实现方案
- Python 原生
%运算符默认采用向下取整取模逻辑,和向下取整除法//配套,满足恒等式a == (a // b) * b + (a % b),余数符号和除数保持一致。 - 你需要的**截断取模(向零取整取模)**不需要完全从零自行编码实现,Python标准库已经提供了对应支持:
math模块的math.fmod()就是原生的截断取模实现,计算时商向零方向截断,余数符号和被除数保持一致,和截断除法的逻辑完全匹配。
用法示例
>>> import math >>> # 向下取整取模(默认%运算符) >>> -9 % 4 3 >>> -61 % 60 59 >>> 9 % -4 -3 >>> # 截断取模(math.fmod) >>> math.fmod(-9, 4) -1.0 >>> math.fmod(-61, 60) -1.0 >>> math.fmod(9, -4) 1.0
补充说明
math.fmod返回值为浮点数类型,如果需要整数类型的结果,既可以对返回值做int()类型转换,也可以直接用极简逻辑实现整数版截断取模:
def trunc_mod(a: int, b: int) -> int: return a - b * int(a / b)
验证效果:
>>> trunc_mod(-9, 4) -1 >>> trunc_mod(-61, 60) -1 >>> trunc_mod(9, -4) 1
注意不要和math.remainder()混淆,该函数采用就近取整规则计算余数,既不属于向下取整取模,也不属于截断取模,不符合截断取模的需求。
内容的提问来源于stack exchange,提问作者echo
相关产品推荐
相关产品推荐

