[英]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.