2013-12-17 4 views
0

У меня есть уродливый метод печати, который принимает длинное регулярное выражение как String. Должно быть более простое решение.Каков наилучший способ форматирования большого десятичного знака в форму доллара?

// 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")))); 

Является ли формат числа, который будет поддерживать мою точность в формате Big Decimal? Фактический метод 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» на каждом из них и объединить результаты, и результат может быть более чистым и более читаемым, но я бы не назвал его «более простым». YMMV. Я не совсем уверен, на что вы надеетесь. – 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 документации.

Смежные вопросы