Рубрики
Без рубрики

Как отформатировать число в виде строки валюты в Java

В этом руководстве вы будете использовать Java для форматирования числа в строку валюты. Мы используем Локальные, Валютные и числоформатные объекты.

Автор оригинала: 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 , Валюта и Формат чисел . Затем мы применили эти знания в методе, который позволил нам правильно отформатировать и распечатать двойной в качестве валюты.