簡體   English   中英

Java:為什么String.format()在此Long變量上不起作用?

[英]Java: Why isn't String.format() working on this Long variable?

我只是試圖獲得毫秒數來顯示變量的前兩位數字。

我期望的工作方式(最初我看到兩位數字,然后遞增,我看到三位數字):

@Override
public String toString() {
    Long milliSeconds = TimeUnit.MILLISECONDS.toMillis(elapsedTime) % 1000;
    Long seconds = (TimeUnit.MILLISECONDS.toSeconds(elapsedTime));
    return String.format("%2d.%02d seconds", seconds, milliSeconds);
}

實際有效的方法:

@Override
public String toString() {
    String milliSeconds = String.format("%02d",
            TimeUnit.MILLISECONDS.toMillis(elapsedTime) % 1000).substring(0, 2);
    Long seconds = (TimeUnit.MILLISECONDS.toSeconds(elapsedTime));
    return String.format("%2d.%s seconds", seconds, milliSeconds);
}

要么:

@Override
public String toString() {
    double milliSeconds = (double)(TimeUnit.MILLISECONDS.toMillis(elapsedTime) % 1000) / 1000;
    Long seconds = (TimeUnit.MILLISECONDS.toSeconds(elapsedTime));
    return String.format("%.2f seconds", seconds + milliSeconds);
}

我想我的第一個問題是,我的兩個解決方案中是否有一個比不占用更多資源的解決方案? 其次,在第一個解決方案中我做錯了什么? 我希望%02d花費較長時間並將其截斷為2的數字,並用0緩沖。相反,我看到了兩位數字和結尾的0。

毫秒應為%03d而非%02d

如果您希望分辨率在數十毫秒的水平,那么您將不得不進行一些“幻想”計算。

return String.format("%2d.%02d seconds", seconds, milliSeconds / 10);
System.out.printf("%07.3f seconds", (elapsedTime / 1000f));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM