2024-06-28 20:04:28 发布
网友
在下面的代码中:高度简化。我得到ZeroDivisionError: float division 任何低于1的值都会产生错误。其他时间5/365给出错误。 如何修复?
ZeroDivisionError: float division
import math def top( t): return ((.3 / 2) * t) / (.3 * math.sqrt(t)) t = 365/365 top= top(t) print (top)
问题在于:
t = 365/365
您正在分割两个整数,因此python正在使用整数分割。在整数除法中,商被四舍五入。例如,364/365将等于0。(365/365起作用是因为它等于1,它仍然是1四舍五入的。)
364/365
0
365/365
1
相反,像这样使用浮点除法。
t = 365.0/365.0
除了cheeken的答案外,您还可以将以下内容放在模块的顶部:
from __future__ import division
这样做将使除法运算符按您希望的方式工作,即始终执行(接近)真正的数学除法。除法运算符的默认行为(如果参数恰好绑定到整数,则执行截断整数除法)是从C继承的,但最终发现它不太适合Python这样的动态类型语言。在Python 3中,这种情况不再发生。
在Python 2模块中,我几乎总是从__future__中导入除法,这样就不会被意外地将整数传递给不希望截断的除法操作所捕获。
__future__
值得注意的是,from __future__ import ...语句必须是模块中的第一件事(我认为在它之前可以有注释和docstring,其他什么都没有)。它实际上不是一个普通的import语句,尽管它看起来像一个;它实际上改变了Python解释器读取代码的方式,因此它不能像普通的import语句一样等待runtime的执行。还要记住import __future__没有from __future__ import ...的魔力。
from __future__ import ...
import __future__
试试这个:
exponent = math.exp(-(math.pow(x-mean,2)/(2*math.pow(stdev,2))))
试图除以零时遇到ZeroDivisionError。
ZeroDivisionError
问题在于:
您正在分割两个整数,因此python正在使用整数分割。在整数除法中,商被四舍五入。例如,
364/365
将等于0
。(365/365
起作用是因为它等于1
,它仍然是1
四舍五入的。)相反,像这样使用浮点除法。
除了cheeken的答案外,您还可以将以下内容放在模块的顶部:
这样做将使除法运算符按您希望的方式工作,即始终执行(接近)真正的数学除法。除法运算符的默认行为(如果参数恰好绑定到整数,则执行截断整数除法)是从C继承的,但最终发现它不太适合Python这样的动态类型语言。在Python 3中,这种情况不再发生。
在Python 2模块中,我几乎总是从
__future__
中导入除法,这样就不会被意外地将整数传递给不希望截断的除法操作所捕获。值得注意的是,
from __future__ import ...
语句必须是模块中的第一件事(我认为在它之前可以有注释和docstring,其他什么都没有)。它实际上不是一个普通的import语句,尽管它看起来像一个;它实际上改变了Python解释器读取代码的方式,因此它不能像普通的import语句一样等待runtime的执行。还要记住import __future__
没有from __future__ import ...
的魔力。试试这个:
试图除以零时遇到
ZeroDivisionError
。相关问题 更多 >
编程相关推荐