どのようにするTimeUnitの列挙型を使用して秒にナノ秒に変換するには?
質問
秒にナノ秒から値を変換するには?
ここでのコードセグメントです。
import java.io.*;
import java.util.concurrent.*;
..
class Stamper {
public static void main (String[] args) {
long start = System.nanoTime();
//some try with nested loops
long end = System.nanoTime();
long elapsedTime = end - start;
System.out.println("elapsed: " + elapsedTime + "nano seconds\n");
//convert to seconds
TimeUnit seconds = new TimeUnit();
System.out.println("which is " + seconds.toSeconds(elapsedTime) + " seconds");
}}
エラーがある
Stamper.java:16: enum types may not be instantiated.
これは何を意味するのでしょうか?
解決
さて、あなただけの10億で割ることができます:
long elapsedTime = end - start;
double seconds = (double)elapsedTime / 1_000_000_000.0;
あなたが変換することTimeUnit
を使用する場合は、小数点以下の精度を失うが、全体数の精度を維持しますので、、あなたは、限り、あなたの結果を得るでしょう。
他のヒント
TimeUnit
列挙
次の式では、 TimeUnit
使用していますA>秒にナノ秒から変換する列挙型(のJava 5以降):
TimeUnit.SECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS)
TimeUnitでは列挙型であるので、あなたは新しいものを作成することはできません。
以下は、秒に1000000000000nsを変換します。
TimeUnit.NANOSECONDS.toSeconds(1000000000000L);
冗長性を減らすには、静的インポートを使用することができます:
import static java.util.concurrent.TimeUnit.NANOSECONDS;
- そして今後だけ入力します。
NANOSECONDS.toSeconds(elapsedTime);
あなたは書く必要があります:
long startTime = System.nanoTime();
long estimatedTime = System.nanoTime() - startTime;
変数にendTimeのを割り当てると、数ナノ秒を引き起こす可能性があります。このアプローチでは、正確な経過時間を取得します。
そして
TimeUnit.SECONDS.convert(estimatedTime, TimeUnit.NANOSECONDS)
これは、整数値よりも正確である、二重形式の秒までの時間を変換します
double elapsedTimeInSeconds = TimeUnit.MILLISECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS) / 1000.0;
所属していません StackOverflow