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ドキュメントからの説明は次のとおりです。

プレーン整数または long 整数の除算では、同じ型の整数が生成されます。結果は、結果に「floor」関数が適用された数学的除算の結果です。

Python 2.2 以降 (Python 3.x では必要ありません) で真の除算を有効にするには、次を使用できます。

from __future__ import division

または、引数の 1 つを float にして、同じ動作を得ることができます。

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