Форматирование валюты канадский английский и французский - PullRequest
7 голосов
/ 26 декабря 2011

У меня есть требование установить значение на основе локали.Я получу локаль либо en_US, либо fr_FR

 String locale = object.getLocale();  //

Затем, исходя из локали, мне нужно определить валюту.Формат валюты, который мне нужен, определен в.

   Language            Example             Notes
   Canadian French     123.456.789,99 $    symbol is a suffix,'comma' for decimal
   Canadian English    $123,456,789.99      symbol is a prefix,'dot' for decimal

В настоящее время у меня есть атрибуты формы, которые я непосредственно устанавливаю значения в своем классе Java.

  ...
  Form form = new Form();
    // Stub data for generating a graph.
    formBean.setCurrOne("123.54");
    formBean.setCurrTwo("456.33");
          ....//before I set those attributes I need to place a check
              // for locale and format the currency accordingly.

Можете ли вы помочь мне сформат.Также есть разница , и . в формате валюты.

Ответы [ 2 ]

6 голосов
/ 26 декабря 2011
NumberFormat canadaFrench = NumberFormat.getCurrencyInstance(Locale.CANADA_FRENCH);
NumberFormat canadaEnglish = NumberFormat.getCurrencyInstance(Locale.CANADA);

BigDecimal amount = new BigDecimal("123456789.99");

System.out.println(canadaFrench.format(amount));
System.out.println(canadaEnglish.format(amount));

Результат:

123 456 789,99 $
$123,456,789.99

Если вы действительно не хотите использовать формат по умолчанию (с пробелами в качестве разделителя тысяч, а не точек), используйте

DecimalFormatSymbols symbols = ((DecimalFormat) canadaFrench).getDecimalFormatSymbols();
symbols.setGroupingSeparator('.');
((DecimalFormat) canadaFrench).setDecimalFormatSymbols(symbols);

Видите, это все для вас делает класс NumberFormat, при условии, что вы зададите ему правильный языковой стандарт. fr_FR означает французский из Франции, а не французский из Канады. Вам нужно fr_CA для этого. И en_US означает английский в Соединенных Штатах, а не английский в Канаде. Для этого вам нужен en_CA.

3 голосов
/ 27 декабря 2011

Joda Money предоставляет отличную модель для денег, а также поддерживает специальное форматирование для разных валют. Пример кода:

CurrencyUnit canadianFrench = CurrencyUnit.getInstance(Locale.CANADA_FRENCH);
CurrencyUnit canadianEnglish = CurrencyUnit.getInstance(Locale.CANADA);

MoneyFormatter canadianFrenchFormat = new MoneyFormatterBuilder().
        appendAmount(MoneyAmountStyle.ASCII_DECIMAL_COMMA_GROUP3_DOT).
        appendLiteral(" $").
        toFormatter();
MoneyFormatter canadianEnglishFormat = new MoneyFormatterBuilder().
        appendLiteral("$").
        appendAmount(MoneyAmountStyle.ASCII_DECIMAL_POINT_GROUP3_COMMA).
        toFormatter();

System.out.println(canadianFrenchFormat.print(Money.of(canadianFrench, 123456789.99)));
System.out.println(canadianEnglishFormat.print(Money.of(canadianEnglish, 123456789.99)));

Немного многословно, да :) 1006 *

...