Java: символ валюты, основанный на коде валюты ISO 4217
Ниже программа печатает символ валюты с кодом валюты 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. Для других входов, таких как евро, просто верните код валюты.
Пример ввода, вывод из программы:
input: java Currency USD
output: $
input: java Currency EUR
output: EUR -> I expect the symbol of Euro here
4 ответа
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 €
Для меня ваш код даже в первом случае возвращает USD. Кажется, что Валюта сильно зависит от версии JRE (для меня 1.6). Perosnally я рекомендую вам написать свой собственный модуль преобразования CUR в символы - это будет намного проще, чем пытаться использовать этот.
Если кому-то это нужно, наоборот (например, € -> EUR)
String currency = €;
String currencyCode = "";
for (Currency c : Currency.getAvailableCurrencies()) {
if (c.getSymbol().equals(currency)) {
currencyCode = c.toString();
}
}
Использование ограниченного перечисления Locale только обслуживает западные символы. Если вы хотите быть более глобальным, попробуйте использовать локали, предоставленные:
Locale[] locales = Locale.getAvailableLocales();
Использование Locales из этого списка давало символы, а не TLA довольно последовательно.