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