题
如何将一个值从纳秒转换为秒?
下面的代码段:
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
一>枚举(Java 5中及以后)从纳秒转换为秒:
TimeUnit.SECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS)
TIMEUNIT是一个枚举,因此不能创建一个新的。
下面将1000000000000ns转换为秒。
TimeUnit.NANOSECONDS.toSeconds(1000000000000L);
要减少冗长,您可以使用静态导入:
import static java.util.concurrent.TimeUnit.NANOSECONDS;
-and此后只需输入
NANOSECONDS.toSeconds(elapsedTime);
您应该写:
long startTime = System.nanoTime();
long estimatedTime = System.nanoTime() - startTime;
在一个变量分配结束时间可能会导致几纳秒。在这种方法中,你会得到确切的经过时间。
然后:
TimeUnit.SECONDS.convert(estimatedTime, TimeUnit.NANOSECONDS)
此将一个时间转换为秒在双格式,这比一个整数值更精确的:
double elapsedTimeInSeconds = TimeUnit.MILLISECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS) / 1000.0;
不隶属于 StackOverflow