为了建立上下文,我只谈论整数运算,在大整数上,所以通过 float 不是一个选项,并且使用负数,所以底除法和截断除法之间的区别很重要。
在对负整数执行除法时,典型的硬件和 C 系列编程语言会给出截断的结果,例如1/-2 = 0。Python 2 给出了 floored 结果,例如1/-2 = -1。
尽管关于哪个本质上更好的争论,有没有办法让 Python 给出截断的结果?如果您使用 Python 3 而不是 2,会有什么不同吗?
最佳答案
好的,如果您只是想要一个解决方案,请记住 int
会截断数字,因此不要进行整数除法,而是使用 int
int(1./-2)
如果你使用的是 Python 3.X,你可以简单地做
int(1/2)
如果你想在 Py 2.X 中有相同的行为,从 future 导入部门
from __future__ import division
int(1/2)
如果您想知道这种行为的确切原因,请阅读这篇精彩的文章 Why Python's Integer Division Floors
看看您在使用 float 进行除法时遇到的困境,据我测试,这是一种似乎有效的替代方法。如果您遇到任何问题,请随时告诉我
>>> def trunc_div(a,b):
q, r = divmod(a,b)
if q < 0 and r:
q += 1
return q
>>> trunc_div(1,-2)
0
>>> trunc_div(999999999999999999999999999999999999999999, -2)
-499999999999999999999999999999999999999999L
>>> trunc_div(999999999999999999999999999999999999999999, 2)
499999999999999999999999999999999999999999L
>>> trunc_div(1,2)
0
>>>
关于python - Python 中的截断与下限划分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15633787/