【问题标题】:Java from currentTimeMillis to seconds giving either 0 or 1Java 从 currentTimeMillis 到秒,给出 0 或 1
【发布时间】:2014-05-07 02:47:11
【问题描述】:

我正在尝试对大约 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) .

谁能帮我指出哪里出了问题?

【问题讨论】:

    标签: java


    【解决方案1】:

    您正在使用整数除法并将结果分配给整数类型。因此,最终结果始终是整数。

    要修复,请使用:

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

    【讨论】:

    • 啊!非常感谢所有人.. 我总是犯这个错误
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      你需要除以 1000.0。

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

      【讨论】:

        猜你喜欢
        • 2015-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-19
        相关资源
        最近更新 更多