没有得到具体的语言环境货币符号(Not getting currency symbols for s

2019-07-20 14:58发布

我试图让基于他们的语言环境的货币符号。 但是,而不是返回一个符号,它返回的代码。 我有一个片段:

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); 

然后,而不是象征它给国家代码。 这是为什么,以及如何我们可以得到的符号?

编辑:找一些答案后,我想明确的是,设置一些特定的默认地方是没有办法了,因为我需要一次显示了所有avalaible迹象

 Locale.setDefault(Locale.UK); 

给我的欧元符号但多莱尔它会给代码,而不是多莱尔符号($)。

Answer 1:

喜请尝试以下代码

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.


Answer 2:

您所看到的Java认为在您的默认语言环境的用户将会看到一个货币符号。 这也可以的Javadoc证实getSymbol()

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

通过改变你的默认语言环境:

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

您可以在实验中证明自己这一点。 ( 注:我并不是说这是一个解决方案,只是一个机会,让你检查什么其他区域设置看 )。

我建议你坚持使用任何的Java认为是适合您的缺省语言环境 - 我敢肯定,它通过你的用户是可以理解的。


这似乎有吸引力,寻求每一个货币的“正常”的货币符号,但是看看下面的货币列表: http://www.xe.com/symbols.php 。

看看有多少国家承认本国货币与$符号。 埃及还使用英镑符号( £ )。 语言环境的货币符号背后的整个想法是给你一个字符串, 您所在区域的用户会明白的。



Answer 3:

一个简单的办法,根据阿姆里特·拉杰·夏尔马的回答:

只需添加的语言环境作为参数传递给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();
  }
}


文章来源: Not getting currency symbols for specific Locale