【问题标题】:Change locale dynamically according to a dynamic currency value根据动态货币值动态更改区域设置
【发布时间】:2016-02-12 15:06:58
【问题描述】:

最终用户会获得一份货币列表。他们可以随时选择他们感兴趣的其中一项。因此,java.text.NumberFormat 中使用的语言环境需要根据所选货币进行更改。这似乎并不简单。

Locale locale = new Locale("en", "US");
NumberFormat decimalFormat = NumberFormat.getCurrencyInstance(locale);
decimalFormat.setGroupingUsed(true);
decimalFormat.setCurrency(Currency.getInstance("USD"));

System.out.println(decimalFormat.format(BigDecimal.valueOf(1.12)));

上面的代码将显示正确的货币值$1.12。由于货币(和语言环境)是在运行时根据用户的偏好动态确定的,如果将USD 更改为不同的东西,例如GBP,那么相关的语言环境也需要从en_US 更改为en_GB .否则,它将显示GBP1.12,其中应为£1.12(为简洁起见,不包括货币汇率)。

有没有办法根据运行时动态提供的货币代码来确定语言环境?

【问题讨论】:

    标签: java locale currency currency-formatting


    【解决方案1】:

    如果您只支持有限数量的货币,那么您最好手动创建映射。否则会很困难,因为每种货币有不止一个有效的语言环境。例如美元可以是en_USes_USes_PRes_EC...

    您可以查看Currency.getInstance(locale) 以了解所有Locale.availableLocales() 的想法:

    for (Locale locale : Locale.getAvailableLocales()) {
      try {
        Currency c = Currency.getInstance(locale);
        System.out.println(c + "\t" + locale);
      } catch (IllegalArgumentException ignore) { }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      相关资源
      最近更新 更多