1

現在、私は time.time() を使用して、マイクロタイムを含むタイムスタンプを作成しています。しかし、主にこれらを小数と比較しており、time.time() は浮動小数点数を返します。

現在、必要に応じて値を float から decimal に変換します。

if type(stamp) == float:
        stamp = Decimal(format(stamp, '.15g'))

しかし、もちろんこれを行うと、精度がいくらか失われます。他にどうすればマイクロタイム 10 進数を取得できますか?

4

1 に答える 1

1

floataをDecimalコンストラクターに直接渡すことができます。

d = Decimal(stamp)

CPythonは、通常のタイムスタンプ範囲でマイクロ秒を表すのに十分な精度を持つfloatCを使用します。double

time.time()datetime.utcnow()となり、若干異なる結果になる場合があります。後者はマイクロ秒に丸められます。

from datetime import datetime 
from decimal import Decimal

td = datetime.utcnow() - datetime(1970, 1, 1)
timestamp_microseconds = (td.days*86400 + td.seconds)*10**6 + td.microseconds
d = Decimal(timestamp_microseconds).scaleb(-6)

Decimal(time.time())結果は、マイクロ秒の精度でと等しくなるはずです。

于 2015-06-17T00:15:37.220 に答える