从currentTimeMillis到Java给出0或1的Java

时间:2014-05-06 18:44:28

标签: java

我正在尝试对大约500万个元素进行排序,并且需要记录它所花费的时间。 我正在做以下事情:

long startTime = (System.currentTimeMillis());
My Sorting Algorithm {}
long totalTime = (System.currentTimeMillis() - startTime);

以毫秒为单位,我获得了适当的时间,但是当我尝试将其转换为秒时,如下所示:

long totalTime = ((System.currentTimeMillis() - startTime)/1000);

它给我0或1不正确。

我也试过让它加倍并得到0.0     double totalTime =((System.currentTimeMillis() - startTime)/ 1000);

事实上,TimeUnit也给出0     TimeUnit.MILLISECONDS.toSeconds(totalTime)。

有人可以帮我指出会出现什么问题吗?

3 个答案:

答案 0 :(得分:1)

您正在使用整数除法并将结果指定为整数类型。因此,最终结果总是整数。

要修复,请使用:

double totalTime = ((System.currentTimeMillis() - startTime)/1000.0);

答案 1 :(得分:0)

你需要除以1000.0。

如果您想进行微基准测试,请不要自己动手,请使用JMH:http://openjdk.java.net/projects/code-tools/jmh/

答案 2 :(得分:0)

您正在体验整数除法的样子。您将转换为整数除法后的双,这样就没有任何区别。除以1000.0并可能在执行除法之前将分子转换为加倍:

double d = ((double) (System.currentTimeMillis()-start))/1000.0;