货币格式加拿大英语和法语

Som*_*Guy 7 java locale dollar-sign currency-formatting

我需要根据语言环境设置值.我会得到语言环境en_USfr_FR

 String locale = object.getLocale();  //
Run Code Online (Sandbox Code Playgroud)

然后根据我需要定义货币的区域设置.我需要的货币格式定义如下.

   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
Run Code Online (Sandbox Code Playgroud)

目前我有表单属性,我直接在我的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.
Run Code Online (Sandbox Code Playgroud)

你能帮我解决这个格式吗?也有是的差异,.货币格式.

JB *_*zet 6

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));
Run Code Online (Sandbox Code Playgroud)

结果:

123 456 789,99 $
$123,456,789.99
Run Code Online (Sandbox Code Playgroud)

如果你真的不想使用默认格式(空格为千位分隔符而不是点数),那么使用

DecimalFormatSymbols symbols = ((DecimalFormat) canadaFrench).getDecimalFormatSymbols();
symbols.setGroupingSeparator('.');
((DecimalFormat) canadaFrench).setDecimalFormatSymbols(symbols);
Run Code Online (Sandbox Code Playgroud)

请参阅,这是由NumberFormat类为您完成的,前提是您为其提供了正确的语言环境.fr_FR表示法国法语,而不是加拿大法语.你需要fr_CA.en_US表示美国英语,而不是加拿大英语.你需要en_CA.