0

アーラン時間形式のタプル を{megasec,sec,microsec}浮動小数点数に変換し、再び元に戻そうとしています。

私はこれを 1 つの方法で行うことができます。

{Megasec,Sec,Usec} = erlang:now().
Total = Megasec*1000000+Sec+Usec/1000000. 
1352802601.427

しかし、この数値を時間形式に戻すのに苦労しています。1000000 で割って丸めるという一般的な考えがありますが、丸め誤差が発生します。例えば

Mega = erlang:round(Total/1000000).
1353

これを正確に取得できれば、同様の手順を getSecondsおよびに適用できますMicroseconds

何か案は?

4

2 に答える 2

3

erlang:truncの代わりに使用できますerlang:round

于 2012-11-13T11:01:36.137 に答える
0

@Falco Hirschenbergerの提案に従って、私がそれを行った方法は次のとおりです。

Mega = erlang:trunc(Total/1000000).
1352
Sec = erlang:trunc(Total - Mega*1000000).
802601
Usec = erlang:round((Total - Mega*1000000 - Sec)*1000000).
427000

ノート。を使用erlang:roundして取得する必要がありましUsecた (そうでなければ、答えは次のようになり427000.0457763672ます。これは、1000000 で割ったときに発生した丸め誤差によるものだと思います)

于 2012-11-13T11:21:48.343 に答える