未获取特定区域设置的货币符号

时间:2013-02-27 07:34:21

标签: java localization locale currency

我试图根据他们的Locale获取货币的符号。但它没有返回符号,而是返回代码。我有一个片段:

import java.util.Currency;
import java.util.Locale;

public class CurrencyFormat
{
  public void displayCurrencySymbols() 
  {
   Currency currency = Currency.getInstance(Locale.US); 
   System.out.println("United States: " + currency.getSymbol());
  } 
  public static void main(String[] args)
  {
    new CurrencyFormat().displayCurrencySymbols();
  }
}

对于 Locale.US ,它会给出符号$但是如果我替换

Currency currency = Currency.getInstance(Locale.US); 

Currency currency = Currency.getInstance(Locale.GERMANY); 

然后它代替符号给出国家代码。为什么这样以及我们如何获得符号?

编辑:在看了一些答案后,我想清楚设置一些特定的默认本地不是解决方案,因为我需要一次显示所有可用的符号。< / p>

e.g。

 Locale.setDefault(Locale.UK); 

会给我欧元符号但是对于doller它会给代码而不是doller符号($)。

3 个答案:

答案 0 :(得分:33)

嗨,请尝试以下代码

import java.text.NumberFormat;
import java.util.Comparator;
import java.util.Currency;
import java.util.Locale;
import java.util.SortedMap;
import java.util.TreeMap;

public class CurrencyExample
{
    public static void main(String[] args) 
    {
         Utils.getCurrencySymbol( Currency.getInstance(Locale.US).getCurrencyCode());
         Utils.getCurrencySymbol(Currency.getInstance(Locale.JAPAN).getCurrencyCode());
         Utils.getCurrencySymbol(Currency.getInstance(Locale.UK).getCurrencyCode());
         Utils.getCurrencySymbol("INR");
    }
}

class Utils{
      public static SortedMap<Currency, Locale> currencyLocaleMap;
      static {
          currencyLocaleMap = new TreeMap<Currency, Locale>(new Comparator<Currency>() {
            public int compare(Currency c1, Currency c2){
                return c1.getCurrencyCode().compareTo(c2.getCurrencyCode());
            }
        });
        for (Locale locale : Locale.getAvailableLocales()) {
             try {
                 Currency currency = Currency.getInstance(locale);
             currencyLocaleMap.put(currency, locale);
             }catch (Exception e){
         }
        }
    }

    public static String getCurrencySymbol(String currencyCode) {
        Currency currency = Currency.getInstance(currencyCode);
        System.out.println( currencyCode+ ":-" + currency.getSymbol(currencyLocaleMap.get(currency)));
        return currency.getSymbol(currencyLocaleMap.get(currency));
    }
}

上述程序的输出如下:

USD:-$
JPY:-¥
GBP:-£
INR:-Rs.

答案 1 :(得分:10)

您正在查看Java认为默认语言环境期望中的用户查看货币符号的内容。 Javadocs对getSymbol()

也证实了这一点
  

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

更改默认语言区域:

Locale.setDefault(Locale.UK); // e.g.

您可以尝试自己证明这一点。 (注意:我不是建议这是一个解决方案,只是一个机会让你检查其他语言环境看到的内容)。

我建议您坚持使用Java认为适合您的默认语言环境的任何内容 - 我确信您的用户可以理解它。


为每种货币寻找“正常”货币符号似乎很有吸引力,但请查看以下货币清单:http://www.xe.com/symbols.php

查看有多少国家/地区使用$符号识别其货币。埃及也使用英镑符号(£)。区域设置货币符号背后的整个想法是为您提供您的区域设置中的用户将理解的字符串。

答案 2 :(得分:3)

一个更简单的解决方案,基于Amrit Raj Sharma的回答:

只需将语言环境作为参数添加到getSymbol()方法。

因此,请将您的代码更改为:

import java.util.Currency;
import java.util.Locale;

public class CurrencyFormat
{
  public void displayCurrencySymbols() 
  {
   Currency currency = Currency.getInstance(Locale.US); 
   System.out.println("United States: " + currency.getSymbol(Locale.US));
  } 
  public static void main(String[] args)
  {
    new CurrencyFormat().displayCurrencySymbols();
  }
}