java - 根据动态货币值动态更改区域设置

标签 java locale currency currency-formatting

向最终用户提供货币列表。他们可以随时选择其中一项他们感兴趣的内容。因此,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(为简洁起见,不包括货币汇率)。

有没有办法根据运行时动态提供的货币代码来确定区域设置?

最佳答案

如果您只支持有限数量的货币,那么您最好手动创建映射。否则,这将会很困难,因为每种货币都有多个有效的区域设置。例如,美元可以是 en_USes_USes_PRes_EC...

您可以查看所有 Locale.availableLocales()Currency.getInstance(locale) 来了解一下:

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

关于java - 根据动态货币值动态更改区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35365841/

相关文章:

Android:在没有 "locale"的情况下在两种语言之间进行选择

c# - 在 .Net 中使用哪种货币舍入算法?

java - java中如何计算大数?

java - 如何使用方法按升序和降序输入数组?

java - ArrayList 内的 ArrayList - 访问值时出现问题

android - 我们如何在多语言搜索应用程序名称时让应用程序出现在 Google Play 上

java - 为什么 Java Character.toUpperCase/toLowerCase 没有像 String.toUpperCase/toLowerCase 这样的 Locale 参数

php - Paypal 金额货币问题

java - 如何解析德国货币数字属性?

java - 如何通过数据库表名获取实体类?