获取ZeroDivisionError:python中的float division

Mer*_*lin 6 python python-3.x

在下面的代码中:高度简化.我得到ZeroDivisionError: float division 任何值低于一个给出错误.其他时间5/365给出错误.我该如何解决?

import math

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


t = 365/365
top= top(t)
print (top)
Run Code Online (Sandbox Code Playgroud)

che*_*ken 8

问题出在这里:

t = 365/365
Run Code Online (Sandbox Code Playgroud)

你正在划分两个整数,所以python使用整数除法.在整数除法中,商被向下舍入.例如,364/365等于0.(365/365因为它等于1,它仍然是1向下舍入的.)

相反,使用float division,就像这样.

t = 365.0/365.0
Run Code Online (Sandbox Code Playgroud)

  • 这在Python 3中发生了变化 - 在Python 3中,你必须使用`//`来截断除法. (5认同)

Ben*_*Ben 7

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

from __future__ import division
Run Code Online (Sandbox Code Playgroud)

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

在我的Python 2模块中,我几乎总是从中导入除法__future__,因此我不会因意外地将整数传递给我不希望截断的除法运算而被捕获.

值得一提的是,from __future__ import ...报表必须是非常的模块中的第一件事情(我想你可以有意见,并收到一份文档字符串,没有别的).它不是一个普通的导入语句,即使它看起来像一个; 它实际上改变了Python解释器读取代码的方式,因此它不能等到运行时像普通的import语句一样被执行.还记得那import __future__不能有任何的魔法效果from __future__ import ....