2016-06-08 60 views
3

只有當打印具有兩個小數雙欲格式化爲我下面描述以下值:如何需要

雙d = 1234 結果應該是1234

雙d = 1234.0 結果應該是1234

雙d = 1234.5 結果應該是1,234.50

這個方法我試過

NumberFormat nf = new DecimalFormat("#,##.##"); 
nf.setMinimumFractionDigits(2); 
nf.setMaximumFractionDigits(2); 
System.out.println(nf.format(d1)); 

但當值是1234或1234 0.0

+0

您應該爲小數點值和非小數點值編寫不同的代碼 –

+0

@AbhishekPatel:絕對! – Bathsheba

+0

圓形案例呢?例如1234.001 –

回答

1

我喜歡拔示巴的解決方案,但如果你想1234.001也被視爲1234:

NumberFormat nf = new DecimalFormat("#,###.00"); 
String s = nf.format(d1); 
if (s.endsWith(".00")) { 
    s = s.substring(0, s.length()-3); 
} 
+0

我也喜歡Bathsheba的回答,但我認爲這是我想要的。您的解決方案几乎無需更改 NumberFormat nf = new DecimalFormat(「#,###。00」); 謝謝。 –

+0

@MilanJayawardane沒問題 - 我用你的修正更新了答案 –

3

這種事情是痛苦做一個格式化這是行不通的。考慮使用

if (d1 % 1.0 == 0.0/*yeah, this ain't quick, but then neither is I/O*/){ 
    // I'm a whole number, floating point modulus is valid in Java. 
    // And this is a remarkably good way of testing if a floating 
    // point value is a whole number. 
    // Format to 0 decimal places. 
} else { 
    // Format to 2 decimal places. 
} 
+0

它適合我,謝謝 –

+0

我想你可以用1234.001看起來像1234.00? –

+0

@ScottAMiller我沒注意到。不,我希望它是1234. –

0
System.out.printf("%.0f",34.0f); 
+0

請解釋一下這個答案。代碼只有答案大多沒有太大的價值。謝謝你!保持良好的工作! –

0

您可以檢查不同的條件和定義相應

double d = 1234.5; 
     String inp[] = Double.toString(d).split("\\."); 
     if((inp.length ==1 &&(inp[1] =="0")) || inp.length ==0){ 
      NumberFormat nf = new DecimalFormat("#,###"); 
      System.out.println(nf.format(d)); 
     }else { 
      NumberFormat nf = new DecimalFormat("#,###.##"); 
      nf.setMinimumFractionDigits(2); 
      nf.setMaximumFractionDigits(2); 
      System.out.println(nf.format(d)); 
     } 
+0

這是一個很好的方法來做到這一點? –

1

格式化嘗試像這樣

NumberFormat nf = new DecimalFormat("#,##.##"); 
System.out.println(nf.format(d1)); 

if(d-(int)d==0){ 
    System.out.println(d); 
} 
else{ 
    System.out.println(nf.format(d)); 
} 
+0

這不起作用 –