【问题标题】:Currency Formatting Canadian English and French货币格式加拿大英语和法语
【发布时间】:2012-01-27 22:21:22
【问题描述】:

我需要根据语言环境设置值。我将获得 en_USfr_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.

你能帮我看看格式吗?此外,,. 的货币格式也有所不同。

【问题讨论】:

    标签: java locale dollar-sign currency-formatting


    【解决方案1】:
    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。

    【讨论】:

    • 这可以用org.springframework.format.number.CurrencyFormatter ANy 例子来完成吗?
    【解决方案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)));
    

    有点冗长,呵呵:)

    【讨论】:

    • 这可以使用org.springframework.format.number.CurrencyFormatter 来完成吗??任何帮助
    • 这个答案真的很有帮助,我想问的一个问题是我们如何为负数添加格式化程序?我需要 (900.00,00) 以防 -90000.00
    • @Sanjaya Pandey joda-money (v0.10) 似乎没有办法做到这一点。您可以在 MoneyAmountStyle 中设置negativeCharacter,但这对您正在寻找的格式没有帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多