为了建立上下文,我仅讨论整数算术,对于大整数,因此不能选择浮点,并且使用负数,因此取整除法和截断除法之间的差异很重要。
当对负整数执行除法时,典型的硬件和 C 系列编程语言会给出截断的结果,例如1 / -2 = 0。Python 2 给出了底数结果,例如1 / -2 = -1。
尽管存在关于哪个本质上更好的争论,但有没有办法让 Python 给出截断的结果?如果使用 Python 3 而不是 2 有什么区别吗?
好吧,如果你只是想要一个解决方案,请记住int
截断数字,因此不要进行整数除法,而是用int
int(1./-2)
如果您使用的是 Python 3.X,您可以简单地执行以下操作
int(1/2)
如果您希望 Py 2.X 中的相同行为从未来导入除法
from __future__ import division
int(1/2)
如果您想了解此行为的确切原因,请阅读这篇精彩的文章为什么Python有整数除法层 http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html
看看您在使用浮动除法时遇到的困境,这是一种替代方法,据我测试,该方法似乎有效。如果您遇到任何问题,请随时告诉我
>>> 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
>>>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)