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. Для других входов, таких как EUR, просто верните код валюты.
Пример ввода, выход из программы:
input: java Currency USD
output: $
input: java Currency EUR
output: EUR -> I expect the symbol of Euro here
Ответы
Ответ 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 €
(см. также на ideone.com).
Ответ 2
Для меня ваш код даже в первом случае возвращает USD. Кажется, что валюта сильно зависит от версии JRE (1,6 для меня). Perosnally я рекомендую вам написать собственный 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();
Использование Locales из этого списка дало символы, а не TLA довольно последовательно.