【问题标题】:Java: Currency symbol based on ISO 4217 currency codJava:基于 ISO 4217 货币代码的货币符号
【发布时间】:2010-10-22 05:01:12
【问题描述】:

以下程序根据 ISO 4217 货币代码打印货币符号。

import java.util.*;

public class Currency{

    public static void main(String args[]) {
        Currency myInstance = Currency.getInstance(args[0]);
        System.out.println(myInstance.getSymbol());
    }
}

问题:输入字符串 USD 时工作正常。对于 EUR 等其他输入,只需返回货币代码。

示例输入,程序输出:

input: java Currency USD 
output: $
input: java Currency EUR
output: EUR -> I expect the symbol of Euro here

【问题讨论】:

    标签: java


    【解决方案1】:

    Currency.getSymbol() 返回相对于默认语言环境的货币符号。

    获取默认语言环境下该货币的符号。例如,对于美元,如果默认语言环境是美国,则符号是 "$",而对于其他语言环境,它可能是 "US$"。如果无法确定符号,则返回 ISO 4217 货币代码。

    如果您想要不同语言环境的符号,请使用 Currency.getSymbol(Locale locale)

    System.out.println(
       Currency.getInstance("USD").getSymbol(Locale.US)
    );
    // prints $
    
    System.out.println(
       Currency.getInstance("USD").getSymbol(Locale.FRANCE)
    );
    // prints USD
    
    System.out.println(
       Currency.getInstance("EUR").getSymbol(Locale.US)
    );
    // prints EUR
    
    System.out.println(
       Currency.getInstance("EUR").getSymbol(Locale.FRANCE)
    );
    // prints €
    

    (see also on ideone.com).

    【讨论】:

    • @polygenelubricats:当我们也知道语言环境国家时,上述方法有效。我目前只有 ISO 4217 货币代码,没有别的。我需要从货币代码中找出语言环境,然后实现类似于上面的代码。
    • @polygenelubricats:是的,非常相似,但我不需要打印 Locale ,我只需要该本地货币的符号。但这种方法有帮助,谢谢。
    • 默认 Java 实现的问题在于它很笨。例如,如果我在美国语言环境中显示欧元,我应该看到类似 €75,而不是 EUR75 - 美国每个人都知道实际的欧元符号比“EUR”好得多。因此,我总是不得不使用自定义代码(例如手动设置 DecimalFormatSymbols)来获得看起来不错的输出,而不是依赖于现有的实现。
    【解决方案2】:

    对我来说,即使在第一种情况下,您的代码也会返回美元。看来,货币在很大程度上取决于 JRE 版本(对我来说是 1.6)。我个人建议您编写自己的 CUR 到符号转换模块 - 这比尝试使用这个模块要容易得多。

    【讨论】:

      【解决方案3】:

      如果有人反过来需要它(例如 € -> EUR)

      String currency = €;
      String currencyCode = "";
      for (Currency c : Currency.getAvailableCurrencies()) {
          if (c.getSymbol().equals(currency)) {
              currencyCode = c.toString();
          }
      }
      

      【讨论】:

        【解决方案4】:

        使用有限的 Locale 枚举仅适用于西化符号。如果您想更加全球化,请尝试使用以下提供的语言环境:

        Locale[] locales = Locale.getAvailableLocales();
        

        使用此列表中的语言环境给出了符号,而不是 TLA 相当一致。

        【讨论】:

        • 它不起作用。它仍然只为所有其他人提供 $ 符号,它只提供货币代码,例如欧元。
        猜你喜欢
        • 2014-12-31
        • 2014-06-14
        • 1970-01-01
        • 2012-09-04
        • 2014-12-07
        • 1970-01-01
        • 2011-05-16
        • 2014-08-28
        • 1970-01-01
        相关资源
        最近更新 更多