web-dev-qa-db-ja.com

正確にミリ秒を秒に変換する方法

ミリ秒から秒(1500msから1.5s、500msから0.5sなど)を可能な限り正確に変換したい。

Double.parseDouble(500 / 1000 + "." + 500 % 1000);は最適な方法ではありません。除算演算から剰余を取得する方法を探しているので、単純に剰余を追加できます。

27
Keir Nellyer

確かにあなただけが必要です:

double seconds = milliseconds / 1000.0;

2つの部分を別々に手動で行う必要はありません-1000.0doubleリテラルとして)の使用が強制する浮動小数点演算のみが必要です。 (あなたのmilliseconds値は何らかの形式の整数であると仮定しています。)

通常のdoubleの場合、結果を正確に表すことができない場合があることに注意してください。 100ミリ秒を0.1秒として表す場合は、BigDecimalの使用を検討してくださいexactly。 (それが物理量であり、そもそも100ミリ秒が正確ではないことを考えると、おそらくdoubleが適切ですが、...)

69
Jon Skeet

単純に試してみませんか

System.out.println(1500/1000.0);
System.out.println(500/1000.0);
5
Ankur

私もこの問題を抱えていました。どういうわけか私のコードは正確な値を提示しませんでしたが、秒単位の数値を0.0に丸めました(ミリ秒が1秒未満の場合)。私を助けたのは、除算値に小数を追加することです。

double time_seconds = time_milliseconds / 1000.0;   // add the decimal
System.out.println(time_milliseconds);              // Now this should give you the right value.
3
John