Автор оригинала: Guest Contributor.
Вступление
Валюта-очень важная часть нашего современного мира. Поэтому для нас не менее важно уметь правильно выражать это на Java.
В этом уроке мы рассмотрим как форматировать числа в виде строк валюты в Java .
Форматируйте номер в виде строки валюты
Вот как вы можете легко отформатировать число, например double
, в строку валюты:
double currencyAmount = 1500.00; // Create a new Locale Locale usa = new Locale("en", "US"); // Create a Currency instance for the Locale Currency dollars = Currency.getInstance(usa); // Create a formatter given the Locale NumberFormat dollarFormat = NumberFormat.getCurrencyInstance(usa); // Format the Number into a Currency String System.out.println(dollars.getDisplayName() + ": " + dollarFormat.format(currencyAmount));
Если мы запустим этот код, это приведет к:
US Dollar: $1,500.00
Форматирование чисел в разных валютах включает в себя несколько классов Java. В нашем примере использовались классы Locale
и Валюта
из пакета java.util
. Кроме того, мы использовали класс NumberFormat
, который можно найти в пакете java.text
.
Давайте глубже погрузимся в эти классы и напишем метод, который форматирует наше число в несколько валют в зависимости от ввода.
Класс Локали
Каждый объект Locale
выражает геополитический регион и включает в себя такую информацию, как язык и местоположение. Страны имеют уникальные способы выражения валюты. Вместо того, чтобы вручную форматировать каждую валюту по-разному, использование объектов Locale
позволяет нам автоматизировать этот процесс.
Чтобы создать новый объект Locale
, мы можем использовать один из трех доступных конструкторов:
Locale(String language); Locale(String language, String country); Locale(String language, String country, String variant);
Однако обратите внимание, что параметры String
для конструкторов не могут быть произвольными. Вы можете найти полный список всех поддерживаемых языков в Java 8 здесь .
Теперь давайте создадим несколько примеров Locale
объектов. Мы будем ссылаться на них позже, когда будем создавать фактический метод печати валюты:
Locale usa = new Locale("en", "US"); Locale germany = new Locale("de", "DE"); Locale japan = new Locale("jp", "JP");
Поскольку мы работаем с валютой, первый параметр String
, язык, будет определять форматирование значения валюты (например,1,000,000. 00 или 1,000.000, 00). Второй параметр String
, регион, определит, какой знак валюты используется (например, $ или ¥).
Класс Валюты
Второй класс, который нам нужно понять, – это класс Валюта
. Каждый объект Валюта
представляет мировую валюту. Мы хотим получить валюту с учетом нашего языка
, поэтому мы будем использовать следующий метод:
Currency.getInstance(Locale locale);
Это вернет соответствующий экземпляр Currency
для указанного параметра Locale
. Итак, используя объекты Locale
, которые мы создали ранее, вот что мы сделаем:
Currency dollars = Currency.getInstance(usa); Currency euros = Currency.getInstance(germany); Currency yen = Currency.getInstance(japan);
Теперь, когда мы создали три экземпляра Currency
, мы можем перейти к следующему классу.
Класс NumberFormat
Класс NumberFormat
имеет методы форматирования чисел на основе языков. Страны по-разному группируют цифры. Например, тысячу можно представить в виде “1000”, “1,000”, “1 000” и другие вариации.
Мы будем использовать метод NumberFormat.getCurrencyInstance(Locale l)
. Этот метод возвращает объект NumberFormat
, соответствующий указанному параметру Locale
. Вот как мы будем использовать его в нашем методе:
NumberFormat dollarFormat = NumberFormat.getCurrencyInstance(usa); NumberFormat eurosFormat = NumberFormat.getCurrencyInstance(germany); NumberFormat yenFormat = NumberFormat.getCurrencyInstance(japan);
Создание метода печати числа в качестве валюты
Теперь, когда мы узнали о трех классах, необходимых для этой программы, мы можем приступить к написанию фактического метода печати double
с форматированием валюты.
Мы также примем строку, указывающую, в какой валюте мы хотели бы ее напечатать:
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
public static void printCurrency(double currencyAmount, String outputCurrency) { Locale locale; if (outputCurrency.equals("Yen")) { locale = new Locale("jp", "JP"); } else if(outputCurrency.equals("Euros")) { locale = new Locale("de", "DE"); } else if (outputCurrency.equals("Dollars")) { locale = new Locale("en", "US"); } else { locale = new Locale("en", "US"); } Currency currency = Currency.getInstance(locale); NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale); System.out.println(currency.getDisplayName() + ": " + numberFormat.format(currencyAmount)); } }
Давайте протестируем этот метод, вызвав его и передав соответствующие аргументы:
printCurrency(1000000.00, "Yen"); printCurrency(1000000.00, "Dollars"); printCurrency(1000000.00, "Euros");
Это приводит к:
Japanese Yen: JPY 1,000,000 US Dollar: $1,000,000.00 Euro: 1.000.000,00 €
Для этого примера мы использовали double
и напечатали как валюту с правильным форматированием. Другие типы чисел также будут работать, но мы советуем придерживаться double
для значений валют.
Вывод
В этой статье мы немного узнали о классах Local
, Валюта
и Формат чисел
. Затем мы применили эти знания в методе, который позволил нам правильно отформатировать и распечатать двойной
в качестве валюты.