Get zeroDivision错误:python中的浮点除法

2024-06-28 20:04:28 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的代码中:高度简化。我得到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)

Tags: 代码importreturn高度topdef错误时间
3条回答

问题在于:

t = 365/365

您正在分割两个整数,因此python正在使用整数分割。在整数除法中,商被四舍五入。例如,364/365将等于0。(365/365起作用是因为它等于1,它仍然是1四舍五入的。)

相反,像这样使用浮点除法。

t = 365.0/365.0

除了cheeken的答案外,您还可以将以下内容放在模块的顶部:

from __future__ import division

这样做将使除法运算符按您希望的方式工作,即始终执行(接近)真正的数学除法。除法运算符的默认行为(如果参数恰好绑定到整数,则执行截断整数除法)是从C继承的,但最终发现它不太适合Python这样的动态类型语言。在Python 3中,这种情况不再发生。

在Python 2模块中,我几乎总是从__future__中导入除法,这样就不会被意外地将整数传递给不希望截断的除法操作所捕获。

值得注意的是,from __future__ import ...语句必须是模块中的第一件事(我认为在它之前可以有注释和docstring,其他什么都没有)。它实际上不是一个普通的import语句,尽管它看起来像一个;它实际上改变了Python解释器读取代码的方式,因此它不能像普通的import语句一样等待runtime的执行。还要记住import __future__没有from __future__ import ...的魔力。

试试这个:

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

试图除以零时遇到ZeroDivisionError

相关问题 更多 >