Вступление
Валюта - очень важная часть нашего современного мира. Поэтому для нас не менее важно уметь правильно выразить это на 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
и Currency
из
пакета java.util
Кроме того, мы использовали NumberFormat
, который
можно найти в пакете java.text
Давайте углубимся в эти классы и напишем метод, который форматирует наше число в нескольких валютах, в зависимости от ввода.
Класс Locale
Каждый 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
, language, будет
определять форматирование значения валюты (например, 1 000 000,00 или 1
000 000,00). Второй String
, region, определяет, какой знак валюты
используется (например, $ или Â ¥).
Валютный класс
Второй класс, который нам нужно понять, - это класс Currency
Каждый
Currency
представляет мировую валюту. Мы хотим получить валюту с
учетом нашего Locale
, поэтому мы будем использовать следующий метод:
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», «1000», «1 000» и другие
варианты.
Мы будем использовать метод NumberFormat.getCurrencyInstance(Locale l)
. Этот метод возвращает NumberFormat
, соответствующий указанному
параметру Locale
Вот как мы будем использовать его в нашем методе:
NumberFormat dollarFormat = NumberFormat.getCurrencyInstance(usa);
NumberFormat eurosFormat = NumberFormat.getCurrencyInstance(germany);
NumberFormat yenFormat = NumberFormat.getCurrencyInstance(japan);
Создание метода печати числа как валюты
Теперь, когда мы узнали о трех классах, необходимых для этой программы,
мы можем приступить к написанию фактического метода печати double
с
форматированием валюты.
Мы также примем String, указав, в какой валюте мы хотели бы распечатать ее как:
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
для значений валюты.
Заключение
В этой статье мы немного узнали о классах Locale
, Currency
и
NumberFormat
Затем мы применили эти знания в методе, который позволил
нам правильно отформатировать и напечатать double
валюту.