python - Python 中的截断与下限划分

标签 python division

为了建立上下文,我只谈论整数运算,在大整数上,所以通过 float 不是一个选项,并且使用负数,所以底除法和截断除法之间的区别很重要。

在对负整数执行除法时,典型的硬件和 C 系列编程语言会给出截断的结果,例如1/-2 = 0。Python 2 给出了 floored 结果,例如1/-2 = -1。

尽管关于哪个本质上更好的争论,有没有办法让 Python 给出截断的结果?如果您使用 Python 3 而不是 2,会有什么不同吗?

最佳答案

好的,如果您只是想要一个解决方案,请记住 int 会截断数字,因此不要进行整数除法,而是使用 int

截断 float
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/

相关文章:

python - 如何修复 : MatplotlibDeprecationWarning: shading ='flat' when X and Y have the same dimensions as C is deprecated since 3. 3

c - 有符号的十六进制除以十进制

algorithm - ARM整数除法算法

python - 算术错误: Python is incorrectly dividing variables

python - “float”对象在 Newton-Raphson 迭代中不可迭代

python - 字段的 setter

python - subprocess.Popen 在 WSL Linux 上花费太长时间

python - OpenCV 使用不对应点的 solvePnPRansac 找到对象的位置

c - C 中整数除法返回 0

python - 节目要结束但不会停止