2013-12-17 40 views
0

我有一個醜陋的打印方法,需要一個長的正則表達式作爲一個字符串。必須有一個更簡單的解決方案。將大數十進制格式轉換爲美元形式的最佳方法是什麼?

// output is in dollars 
String formatString = "%1$-20d%2$-20.2f%3$-20.2f%4$.2f,%5$.2f,%6$.2f\n"; 
printf(formatString, paymentNumber++, BigDecimal.ZERO, BigDecimal.ZERO,           
(amountBorrowed.divide(new BigDecimal("100"))), 
(totalPayments.divide(new BigDecimal("100"))), 
(totalInterestPaid.divide(new BigDecimal("100")))); 

數字格式是否會保持我的大十進制精度?下面是實際的printf方法。

private static void printf(String formatString, Object... args) { 

    try { 
     if (console != null) { 
      console.printf(formatString, args); 
     } else { 
      System.out.print(String.format(formatString, args)); 
     } 
    } catch (IllegalFormatException e) { 
     System.out.print("Error printing...\n"); 
    } 
} 

我知道這很可怕。任何人都想到更好的方法?

+3

[getCurrencyInstance](http://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html#getCurrencyInstance(java.util.Locale)) –

+0

這將如何用於替換以上雖然? – user10297

+0

(1)格式字符串不是「正則表達式」;正則表達式用於模式匹配。 (2)是的,這應該適用於'BigDecimal'。 (3)如果你有六個數字,你需要以六種不同的方式進行格式化,你將需要這樣的東西。你可以將它分成六個部分,每個部分調用'String.format',並連接結果,結果可能更清晰,更易讀,但我不會稱之爲「更簡單」。因人而異。我不太確定你的期望。 – ajb

回答

1

您可以使用NumberFormat#getCurrencyInstance(Locale)爲貨幣格式BigDecimal。下面是在美元格式爲例(使用在美國地區):

BigDecimal amount = new BigDecimal("2.5"); 
NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.US); 
String amountInDollarForm = formatter.format(amount); 
System.out.println(amountInDollarForm); // prints $2.50 

欲瞭解更多信息,有機會參觀the java.text.NumberFormat文檔。

相關問題