获取ZeroDivisionError: 浮点数除法错误在python中

15 投票
3 回答
122237 浏览
提问于 2025-04-17 02:38

在下面的代码中:这是一个非常简单的例子。我遇到了 ZeroDivisionError: float division 的错误。任何小于1的值都会导致错误。有时候,5除以365也会出错。我该怎么解决这个问题呢?

import math

def top(  t):
    return ((.3 / 2) * t) / (.3 * math.sqrt(t))


t = 365/365
top= top(t)
print (top)

3 个回答

3

试试这个:

 exponent = math.exp(-(math.pow(x-mean,2)/(2*math.pow(stdev,2))))   

当你尝试用零去做除法时,就会出现一个叫做ZeroDivisionError的错误。

9

除了cheeken的回答,你可以在你的模块顶部加上以下内容:

from __future__ import division

这样做会让除法运算符按照你想要的方式工作,也就是总是进行(接近真实的)数学除法。除法运算符的默认行为是,如果你用整数进行运算,它会进行截断的整数除法,这个特性是从C语言继承过来的,但后来发现这对于像Python这样动态类型的语言并不太合适。在Python 3中,这种情况就不再发生了。

在我的Python 2模块中,我几乎总是从__future__导入除法,这样我就不会因为意外传入整数而导致除法运算被截断。

值得注意的是,from __future__ import ...语句必须是你模块中的第一件事情(我想在它之前可以有注释和文档字符串,但不能有其他内容)。这其实并不是一个普通的导入语句,虽然看起来像;它实际上改变了Python解释器读取你代码的方式,所以不能像普通的导入语句那样等到运行时再执行。另外要记住,import __future__并没有from __future__ import ...的那些神奇效果。

12

问题出在这里:

t = 365/365

你在做两个整数的除法,所以 Python 使用的是整数除法。在整数除法中,结果会向下取整。比如说,364/365 的结果是 0。(而 365/365 的结果是 1,因为 1 向下取整还是 1。)

相反,你应该使用浮点数除法,像这样。

t = 365.0/365.0

撰写回答