Ram*_*kla 21 java locale localization 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();
}
}
Run Code Online (Sandbox Code Playgroud)
对于Locale.US,它给出符号$但是如果我替换
Currency currency = Currency.getInstance(Locale.US);
Run Code Online (Sandbox Code Playgroud)
同
Currency currency = Currency.getInstance(Locale.GERMANY);
Run Code Online (Sandbox Code Playgroud)
然后代替符号,它给出了国家代码.为什么这样以及我们如何获得符号?
编辑:在看了一些答案后,我想清楚设置一些特定的默认本地不是解决方案,因为我需要一次显示所有可用的符号.
例如
Locale.setDefault(Locale.UK);
Run Code Online (Sandbox Code Playgroud)
将给我欧元符号,但对于doller它将给代码而不是doller sign($).
小智 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));
}
}
Run Code Online (Sandbox Code Playgroud)
上述程序的输出是这样的:
USD:-$
JPY:-?
GBP:-£
INR:-Rs.
Run Code Online (Sandbox Code Playgroud)
Dun*_*nes 10
您将看到Java认为您的默认语言环境中的用户期望查看货币符号的内容.Javadocs也证实了这一点getSymbol():
获取默认语言环境的此货币的符号.例如,对于美元,如果默认语言环境是美国,则符号为"$",而对于其他语言环境,符号可能为"US $".如果无法确定符号,则返回ISO 4217货币代码.
通过更改默认语言环境:
Locale.setDefault(Locale.UK); // e.g.
Run Code Online (Sandbox Code Playgroud)
您可以尝试自己证明这一点.(注意:我不是建议这是一个解决方案,只是一个机会让你检查其他语言环境看到的内容).
我建议您坚持使用Java认为适合您的默认语言环境的任何内容 - 我确信您的用户可以理解这一点.
寻找每种货币的"正常"货币符号似乎很有吸引力,但请查看以下货币清单:http://www.xe.com/symbols.php.
看看有多少国家用$符号识别他们的货币.埃及也使用英镑符号(£).语言环境货币符号背后的整个想法是为您提供一个字符串,您的语言环境中的用户将理解该字符串.
| 归档时间: |
|
| 查看次数: |
20875 次 |
| 最近记录: |