Python3中1//-2与int(1/-2)结果不同的技术咨询
为什么
1 // -2和int(1 / -2)结果不同? 这是个很容易被忽略的细节,本质是两种操作遵循的取整规则完全不同,我给你一步步拆解清楚:
1. // 是地板除法(Floor Division)
//运算符的核心逻辑是向下取整——也就是计算结果向负无穷的方向取最近的整数。
比如计算1 // -2:
- 先算数学上的商:
1 / -2 = -0.5 - 向下取整(往更小的数方向走):比-0.5小的最近整数是
-1,所以最终结果是-1
再举几个负数除法的例子验证:
3 // -2→ 商是-1.5,向下取整得到-2-3 // 2→ 商是-1.5,向下取整得到-2
2. int(1 / -2) 是截断小数取整
首先1 / -2是Python的普通浮点数除法,结果是-0.5。而int()函数处理浮点数时,是直接截断小数部分(向零的方向取整):
- 对于正数,比如
int(1.9)会得到1; - 对于负数,
int(-0.5)会直接去掉小数部分,得到0(因为向零的方向取整,-0.5更靠近0)
同样用例子对比:
int(3 / -2)→ 商是-1.5,截断小数后得到-1int(-3 / 2)→ 商是-1.5,截断小数后得到-1
关键总结
- 正数除法时,地板取整和截断取整结果一致(比如
3//2和int(3/2)都是1),所以容易忽略差异; - 负数除法时,两种规则的区别就会显现:
//向负无穷取整,int()向零取整。
内容的提问来源于stack exchange,提问作者Ryan Zhu




