2015-10-18 86 views
2

如何將BigDecimal()存儲爲輸入?BigDecimal()省略前導零

我需要存儲使用BigDecimal的實數(),它可能包含以下內容:

02.34 
0.12 
.12 
0 
000.000 

我用下面的方法:

Scanner sc= new Scanner(System.in); 
int n=sc.nextInt(); 
BigDecimal[] amount = new BigDecimal[n]; 

for(int i=0;i<n;i++) { 
    amount[i]=sc.nextBigDecimal(); 
} 

但打印,其打印格式。像這樣:

2.34 
0.12 
0.12 
0.000 
0 

我想它應該與輸入相同。因此,請讓我知道,我怎樣才能設法保存輸入。

回答

1

由於輸入最初是一個字符串,因此將其完整保存的唯一方法是將其存儲爲String

如果您以後需要對數字進行一些數學計算,那麼將其轉換。您也可以將它們作爲StringBigDecimal存儲在一個對象中。

1

如果要保存輸入,請將其存儲爲String。這正是內置類型,專門用於存儲與輸入完全相同的字符序列。

BigDecimal另一方面,有一個數字表示沒有機制來存儲它的十進制輸入。事實上,您可以初始化BigDecimal而不提供十進制表示 - 例如通過一系列算術操作,在這種情況下,初始表示根本不適用。

如果你需要在很多地方做到這一點,爲它做一個類。存儲原始字符串,它代表它代表的BigDecimal。這樣,您將能夠與它一起做轉換隻有一次,並保持原始表示:

class OrigBigDecimal { 
    private String orig; 
    private BigDecimal val; 
    public OrigBigDecimal(String s) { 
     orig = s; 
     val = new BigDecimal(s); 
    } 
    public String toString() { return s; } 
    public BigDecimal getVal() { return val; } 
} 
1

下面的代碼應該解決您的問題,讓您的字符串是並將其轉換成BigDecimal的,只有當你在比較

Arrays.sort(s, Collections.reverseOrder(new Comparator<String>() { 
     @Override 
     public int compare(String a1, String a2) { 
      BigDecimal a = new BigDecimal(a1); 
      BigDecimal b = new BigDecimal(a2); 
      return a.compareTo(b); 

     } 
    }));