9

我正在尝试对日期进行一些计算,我有一个timedelta对象,并且我想获得秒数。它似乎dt.total_seconds()完全符合我的需要,但不幸的是它是在 Python 2.7 中引入的,我坚持使用旧版本。

如果我阅读官方文档,它会说明以下内容:

返回持续时间中包含的总秒数。等价于 (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6 计算启用真除法

在查看了datetime模块的源代码(在 C 中)之后,我看到了这样的内容:

total_seconds = PyNumber_TrueDivide(total_microseconds, one_million);

因此,虽然 的计算total_seconds()似乎微不足道,但这让我想知道这个真正的除法实际上意味着什么。我找不到有关该主题的任何信息。如果我只使用常规除法会发生什么,为什么我们需要这种真正的除法,它有什么作用?我可以total_seconds()用文档中给出的等价物用 Python 编写吗?

4

2 回答 2

10

使用真正的除法,1 / 2将导致0.5. Python 2.x 中的默认行为是使用整数除法,这1 / 2将导致0. 以下是文档的解释:

普通或长整数除法产生相同类型的整数;结果是数学除法的结果,“地板”函数应用于结果。

要在 Python 2.2 或更高版本上启用真正的除法(在 Python 3.x 上不是必需的),您可以使用以下命令:

from __future__ import division

或者,您可以将其中一个参数设为浮点数以获得相同的行为:

(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10.0**6
于 2012-04-26T18:56:26.820 回答
0

无论如何,当您在代码中使用数字时,最简单的方法是在第一个除法上使用浮点数。

如果您使用 10.0**6,您的结果将是一个浮点数,这意味着公式中的所有其他数字也将是浮点数,这会导致“真正的除法”。

于 2013-08-24T22:41:15.773 回答