Локализованное форматирование валюты в Java

Большинство современных приложений, ориентированных на более широкую аудиторию, например, интернет-пользователей, обычно также имеют дело с деньгами. В таких приложениях требованием будет отображение денег/валюты в формате, специфичном для этого местоположения или страны.

В этом уроке я привожу несколько примеров, которые помогут вам отобразить валюту, привязанную к местоположению, в пользовательском интерфейсе вашего приложения. Сначала я перечисляю классы, используемые в примерах, а затем мы рассмотрим реальные коды примеров.

Обратите внимание, что класс NumberFormat или класс Currency не конвертирует валюты с использованием логики обменного курса. Они являются простым представлением в соответствии с данными о местоположении, предоставленными классом Locale. Если вы хотите конвертировать между валютами, добавьте больше логики в свое приложение.

1. Классы, используемые при форматировании валюты

Ниже приведены основные классы Java, которые используются для форматирования валют на основе локали.

  • java.util.Currency : Этот класс представляет валюту. Класс разработан таким образом, что для любой заданной валюты никогда не существует более одного экземпляра Currency. Поэтому нет открытого конструктора. Мы получаем экземпляр Currency с помощью метода getInstance().
 Валюта usd = Currency.getInstance("USD");System.out.println(usd.getDisplayName()); // Вывод: доллар США
  • java.util.Locale : этот класс используется для получения информации о местоположении конечного пользователя, который в данный момент использует ваше приложение.
Locale usLocale = new Locale("en", "US"); 
  • java.text.NumberFormat : NumberFormat помогает вам форматировать и анализировать числа для любой локали. Мы будем использовать его метод getCurrencyInstance() для получения отформатированного числа валюты.
NumberFormat nf = NumberFormat.getCurrencyInstance(); //Default Locale//orNumberFormat nf = NumberFormat.getCurrencyInstance(Locale.CHINESE); //Cutom Locale

2. Форматирование валюты

Чтобы отформатировать числовое значение как валюту, используйте метод format() объекта NumberFormat. Следующий пример был запущен для локали США.

double amount = 1234.567;NumberFormat localizedCurrencyFormat = NumberFormat.getCurrencyInstance(Locale.US);String formattedCurrency = localizedCurrencyFormat.format(amount);System.out.println(formattedCurrency); // Output: $1,234.57

Теперь давайте изменим локаль на Францию и посмотрим на вывод:

double amount = 1234.567;NumberFormat frCurrencyFormat = NumberFormat.getCurrencyInstance(Locale.FRANCE);String frFormattedCurrency = frCurrencyFormat.format(amount);System.out.println(frFormattedCurrency); // Output: 1 234,57 €

Достаточно просто, не правда ли?

3. Анализ валюты

Чтобы преобразовать строку валюты в числовое значение, используйте метод parse() объекта NumberFormat.

String currencyString = "$1,234.57";try {NumberFormat localizedCurrencyFormat = NumberFormat.getCurrencyInstance(Locale.US);Number parsedNumber = localizedCurrencyFormat.parse(currencyString);double parsedAmount = parsedNumber.doubleValue();System.out.println(parsedAmount); // Output: 1234.57} catch(ParseException e) {e.printStackTrace();}

4. Обработка округления валюты

Класс NumberFormat позволяет указать режим округления для форматированных денежных значений.

NumberFormat roundedCurrencyFormat = NumberFormat.getCurrencyInstance();roundedCurrencyFormat.setRoundingMode(RoundingMode.HALF_UP);String formattedValue = roundedCurrencyFormat.format(123456.789d);System.out.println(formattedValue); // Output: $123456.79

Мы можем указать один из следующих режимов округления для контролируемой точности и поведения округления.

Режим округления Описание Пример
ВВЕРХ Округляет в сторону положительной бесконечности. Если результат положительный, он ведет себя как CEILING; если отрицательный, он ведет себя как FLOOR. 2,1 округлено в большую сторону, равно 3,0.
ВНИЗ Округляет в сторону отрицательной бесконечности. Если результат положительный, он ведет себя как FLOOR; если отрицательный, он ведет себя как CEILING. 2,9 округлено В НИЖНУЮ сторону равно 2,0.
ПОТОЛОК Округляет в сторону положительной бесконечности, даже если исходное число отрицательное. 2.1 округленный ПОТОЛОК равен 3.0,
-2,1 округленный ПОТОЛОК равен -2,0.
ПОЛ Округляет в сторону отрицательной бесконечности. Всегда округляет в сторону отрицательной бесконечности, даже если исходное число положительное. 2.9 округленный ПОЛ равен 2.0,
-2,9 округлено FLOOR равен -3,0.
ПОЛУВЕЛИЧИТЬ Округляет в сторону ближайшего соседа. Если число находится ровно посередине между двумя соседями, оно округляется от нуля. 2,5 округлено HALF_UP равно 3,0
ПОЛОВИНА_ВНИЗ Округляет в сторону ближайшего соседа. Если число находится ровно посередине между двумя соседями, оно округляется в сторону ближайшего четного соседа. 2,5 округлено HALF_DOWN равно 2,0
ПОЛОВИНА_ЧЕТНАЯ Округляет в сторону ближайшего соседа. Если число находится ровно посередине между двумя соседями, оно округляется в сторону ближайшего четного соседа. 2,5 округлено HALF_EVEN равно 2,0
НЕНУЖНЫЙ Указывает, что округление не требуется или не должно выполняться. Любая попытка округления приведет к исключению.

5. Заключение

Java обеспечивает комплексную поддержку обработки локализованных форматов валют. Это позволяет нам создавать приложения, которые адаптируются к предпочтениям пользователей из разных регионов. Используя классы NumberFormat, Currency и Locale, разработчики могут гарантировать, что значения валют будут представлены и проанализированы таким образом, чтобы соответствовать культурным и языковым ожиданиям пользователей.

Прокрутить вверх