Python 3中`int(x / y)`与`x // y`的差异及原因?
Python 3中
x // y与int(x / y)的差异 在Python 3里,x // y(地板除法)和int(x / y)(先除法再转整数)确实存在差异,核心区别体现在负数运算场景,本质是两者遵循的舍入规则完全不同。
具体差异表现
1. 正数运算时结果一致
当x和y均为正数时,两种方式的结果相同:
5 // 2→2,int(5 / 2)→210 // 3→3,int(10 / 3)→3
这是因为正数的商是正浮点数,向下取整和截断小数部分的效果一致。
2. 负数运算时结果不同
这是两者差异的核心场景,因为舍入规则的不同导致结果天差地别:
- 地板除法
//:遵循向下取整(向负无穷方向舍入),即取不大于商的最大整数。 int(x / y):对浮点数执行向零截断,直接丢弃小数部分,保留靠近零的整数。
举几个实际例子:
- 计算
-5 // 2:商是-2.5,向下取整得到-3;而int(-5 / 2)是直接截断-2.5的小数部分,得到-2。 - 计算
7 // -3:商是-2.333...,向下取整得到-3;而int(7 / -3)截断小数后得到-2。 - 计算
-7 // -3:商是2.333...,向下取整得到2;int(-7 / -3)截断后也是2(此时正数场景,结果一致)。
差异根源
x / y在Python 3中始终返回浮点数,int()对浮点数的转换逻辑是截断小数部分,只保留整数位,无论正负。//是Python的地板除法运算符,其设计逻辑是返回小于等于商的最大整数,也就是向负无穷方向舍入,不受操作数正负的影响。
内容的提问来源于stack exchange,提问作者shahanneda
相关产品推荐
相关产品推荐

