2015-12-22 110 views
-1

我需要一個包含double(類似於14562.34)的字符串並對其進行格式化,使其看起來像$ 000,000,00#。## - 。我的意思是,$將一路左移,如果一個數字不在那裏,上面的0不會出現,但我希望間隔在那裏。 #是數字,如果數字爲零,我需要至少0.00才顯示出來。如果數字是負數,' - '會顯示出來(儘管我相信這是我在格式化程序的最後可以做的)。當我嘗試爲格式化程序執行「000,000,00#。##」時,我得到格式錯誤的異常。使用DecimalFormat在Java中格式化貨幣字符串

有沒有人有這樣做的提示或我做錯了什麼?

下面舉例說明:

1234.56 - > $ ______ 1,234.56

0 - > $ 0.00 __________

1234567.89 - > $ __ 1,234,567.89

凡「_ '代表仍然存在的空間。

謝謝。

+0

我認爲這個問題回答你在找什麼[使用BigDecimal的(http://stackoverflow.com/questions/13791409/java-format-double-value-as-dollar-amount) –

+2

可能的複製與貨幣工作](http://stackoverflow.com/questions/1359817/using-bigdecimal-to-work-with-currencies) – Abdelhak

回答

1
public static void main(String[] args) throws ParseException { 
String data = "1234.6"; 
DecimalFormat df = new DecimalFormat("$0,000,000,000.00"); 
System.out.println(df.format(Double.parseDouble(data))); 
} 

請注意「00」,意思是兩位小數。如果您使用「#。##」(#表示「可選」數字),它將刪除尾隨零 - 即新的DecimalFormat(「#。##」)。format(3.0d);只打印「3」,而不打印「3.00」。

編輯: -

如果你想空間,而不是零,您可以使用的String.format()方法來實現這一目標。 如果十進制的大小大於最大前導零大小,則返回帶有美元符號的雙解析數字,否則添加前導空格。

這裏長度是直到可以添加空間的最大大小,在此之後領先空間被忽略。

public static String leadingZeros(String s, int length) { 
    if (s.length() >= length) return String.format("$%4.2f",Double.valueOf(s)); 
    else 
     return String.format("$%" + (length-s.length()) + "s%1.2f", " ",Double.valueOf(s)); 
    } 
+1

更新的領先空間答案,而不是領先零。 – Naruto

0

如果你正在尋找如何從一個數字格式的貨幣細節......這是爲了確保您的數字貨幣顯示了正確的語言環境和格式的最佳方式。

public String getFormattedCurrencyValue(String number){ 

    BigDecimal num = new BigDecimal(number); 
    NumberFormat nf = NumberFormat.getCurrencyInstance(locale); 
    Currency currency = nf.getCurrency(); 

    String str = StringUtil.replace(
      nf.format(number), 
      nf.getCurrency().getSymbol(locale), 
      "",false).trim(); 

    return currency.getCurrencyCode()+str; 
}