2014-04-24 116 views
2

在我的計劃,我使用模式###在DecimalFormat,如下圖所示:十進制格式中的#。##和##。##模式有什麼區別?

DecimalFormat df = new DecimalFormat("#.##"); 

通過錯誤,我增加了一個額外#,如下圖所示:

DecimalFormat df = new DecimalFormat("##.##"); 

但這不會影響我的輸出。我試過使用不同的輸入組合。輸出沒有區別。嘗試谷歌搜索,但沒有適當的解釋。

那麼使用「#。##」和「##。##」的確切區別是什麼?

如果兩者都相同,爲什麼它允許在Java中使用?

如果兩者都不同,爲什麼輸出在兩種情況下都是相同的?

編輯:

樣例程序:

import java.text.DecimalFormat; 

public class Decimals { 

    public static void main(String[] args) { 

     double d1[] = new double[] {100d, -1d, -0.111111d, 2.555666d, 55555555555d, 0d}; 

     DecimalFormat df1 = new DecimalFormat("#.##"); 
     DecimalFormat df2 = new DecimalFormat("##.##"); 

     for (double d : d1) { 
      System.out.println(df1.format(d)); 
      System.out.println(df2.format(d)); 
     } 
    } 

} 

輸出:

100 
100 
-1 
-1 
-0.11 
-0.11 
2.56 
2.56 
55555555555 
55555555555 
0 
0 
+2

是什麼您測試的值和您得到的結果? – Jay

+0

用示例程序更新了問題。 –

+2

「如果兩者都相同,爲什麼它允許在Java中?」 - 因爲檢測等效模式比僅允許它們更難? –

回答

2

IMHO,DecimalFormat用於格式化數字的整個represntation和多個後controling的位數計數

所以###之前小數(.)不會表現不同....但肯定會做,如果放在一個小數(.

假設12.234作爲輸入號碼後:

12.234和12.23會有意義

12.234和2.234不會。

所以重點放在格式和值小數點後像:

  • setMinimumFractionDigits(0);

  • setMaximumFractionDigits(2);

  • setRoundingMode

0

根據DecimalFormat JavaDoc。 「#,十進制,零顯示爲不存在」。

所以額外的#將顯示另一個數字,除非它是0.因此這兩種格式給出相同的結果。

編輯:事實上,它們都不做任何事情,因爲它們相當於默認的格式。

相關問題