2011-12-26 5 views
3

로캘에 따라 값을 설정해야합니다. 나도 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 

현재 자바 클래스의 값을 설정하는 양식 속성이 있습니다.

... 
    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. 

형식으로 도움을 주시겠습니까? 또한 통화 형식으로 ,.의 차이가 있습니다.

답변

4
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)); 

는 결과 : 당신이 정말로 (오히려 점 이상 1000 개 단위 구분 기호로 공백) 기본 형식을 사용하지 않으려면

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가 필요합니다.

+0

이가'org.springframework.format.number.CurrencyFormatter '어떤 예를 사용하여 수행 할 수 있습니다 :)? –

2

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

비트 자세한, 허

+0

이 작업은'org.springframework.format.number.CurrencyFormatter '을 사용하여 수행 할 수 있습니까 ?? 어떤 도움 –

+0

이 답변은 정말로 도움이됩니다. 내가 물어보고 싶은 한 가지 질문은 어떻게 부정적인 금액에 대한 포매터를 추가 할 수 있는가하는 것입니다. -90000.00의 경우에 (900.00,00)이 필요합니다. –

+0

@Sanjaya Pandey joda-money (v0.10)로는 그렇게 할 방법이없는 것 같습니다. 'MoneyAmountStyle'에 negativeCharacter를 설정할 수는 있지만, 찾고있는 서식의 종류에 도움이되지 않습니다. –