Python整数取整异常:-2/3与int(-2/3.0)结果不一致
为什么Python中
-2/3返回-1,而int(-2/3.0)返回0? 这其实是两种不同取整规则加上Python版本中除法运算符行为差异导致的,我来给你拆解清楚:
1. Python 2中整数除法的「地板取整」规则
在Python 2里,当/运算符两边都是整数时,它执行的是地板除法(floor division)——也就是向负无穷方向取整,而不是你以为的向0取整。
举个例子:
2/3:计算结果是0.666...,向负无穷取整就是0,和你看到的一致;-2/3:计算结果是-0.666...,向负无穷取整的话,比-0.666更小的整数是-1,所以结果就是-1。
2. 浮点数除法与int()的「向0取整」规则
当你用-2/3.0时,因为其中一个操作数是浮点数,所以/执行的是浮点数除法,得到-0.6666666666666666。
而int()函数处理浮点数时,采用的是向0取整的规则——简单说就是直接截断小数部分,只保留整数部分:
- 对于
0.666...,截断后是0; - 对于
-0.666...,截断小数部分后剩下的就是0,所以int(-0.666...)返回0。
3. Python 3中的除法行为(补充说明)
如果你切换到Python 3,这个差异会更清晰:
2/3和-2/3都会返回浮点数结果(0.666...和-0.666...);- 整数地板除法需要用
//运算符,比如-2//3会返回-1,和Python 2中-2/3的行为一致。
总结一下:你看到的结果差异,核心是整数除法(Python2的/)用地板取整,而int()对浮点数用向0取整,这两种规则在处理负数时会产生截然不同的结果。
内容的提问来源于stack exchange,提问作者sjaak31367
相关产品推荐
相关产品推荐

