Класс java.text.NumberFormat используется для форматирования чисел в соответствии с определенным языком. В разных странах существуют разные стандарты форматирования чисел. В Дании дробные части числа отделяются от целой части запятой. В Англии они используют точку.
Создание NumberFormat
Создание NumberFormat для определенной локали выполняется следующим образом:
Locale locale = new Locale("da", "DK");
NumberFormat numberFormat = NumberFormat.getInstance(locale);
Форматирование чисел
Форматирование числа с помощью NumberFormatter выполняется с помощью метода format(). Вот пример:
String number = numberFormat.format(100.99);
System.out.println(number);
Используя датский язык, выходные данные, напечатанные из этого кода, будут:
100,99
Обратите внимание, что такие числа, как 100.00, могут быть отформатированы без десятичных знаков, как 100.
Форматирование валют
Чтобы отформатировать число в качестве валюты, вам нужен экземпляр NumberFormat. Вы создаете формат номера валюты с помощью getCurrencyInstance() следующим образом:
NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(locale);
Форматирование числа в качестве валюты по-прежнему выполняется с помощью метода format(). Вот пример:
String currency = currencyFormat.format(100.999);
System.out.println(currency);
Выходные данные, напечатанные из этого кода, будут следующими:
kr 101,00
Обратите внимание, как перед номером написан локализованный код датской валюты. Вместо этого в других странах может быть указан код валюты после номера. Обратите также внимание, что сумма округлена.
Также возможно получить объект Currency, представляющий валюту, используемую для форматирования числа. Вы делаете это с помощью метода getCurrency(). Вот пример:
Currency currency = currencyFormat.getCurrency();
Из экземпляра Currency вы можете получить имя, символ и т.д. валюты, используя ее методы getDisplayName() и getCurrencyCode() и т.д.
Вы также можете задать объект Currency, который будет использоваться для форматирования числа в качестве валюты, используя метод setCurrency() в классе NumberFormat. Вот пример:
NumberFormat numberFormat =
NumberFormat.getCurrencyInstance(new Locale("da", "DK"));
numberFormat.setCurrency(Currency.getInstance("EUR"));
String currencyString = numberFormat.format(120.99);
System.out.println(currencyString);
Этот код создает средство форматирования валюты с использованием датской локали, а затем обменивает валюту, используемую для форматирования, на евро. Выходные данные, напечатанные из этого кода, будут следующими:
€ 120,99
Форматирование процентов
Чтобы отформатировать число в процентах, вам нужен экземпляр percentage NumberFormat. Вы создаете это с помощью getPercentageInstance() следующим образом:
NumberFormat percentageFormat = NumberFormat.getPercentInstance(locale);
Форматирование числа в процентах также выполняется с помощью метода format(). Вот пример:
String percentage = percentageFormat.format(99.999);
System.out.println(percentage);
Выходные данные, напечатанные из этого кода, будут следующими:
10.000%
Обратите внимание на символ % после числа. Обратите также внимание, что число округлено.
Минимальные и максимальные числа
Вы можете установить как минимальное, так и максимальное количество цифр, которые будут использоваться как для целой, так и для дробной части числа. Вы делаете это, используя следующие методы:
numberFormat.setMinimumIntegerDigits(int digits)
numberFormat.setMaximumIntegerDigits(int digits)
numberFormat.setMinimumFractionDigits(int digits)
numberFormat.setMaximumFractionDigits(int digits)
Вы также можете получить эти значения снова, используя следующие методы:
int digits = numberFormat.getMinimumIntegerDigits();
int digits = numberFormat.getMaximumIntegerDigits();
int digits = numberFormat.getMinimumFractionDigits();
int digits = numberFormat.getMaximumFractionDigits();
Режим округления
Как вы, возможно, заметили ранее, форматированные числа округлены. Вы можете установить режим округления с помощью метода setRoundingMode() класса NumberFormat. Вот пример:
NumberFormat numberFormat =
NumberFormat.getInstance(new Locale("da", "DK"));
numberFormat.setRoundingMode(RoundingMode.HALF_DOWN);
numberFormat.setMinimumFractionDigits(0);
numberFormat.setMaximumFractionDigits(0);
String number = numberFormat.format(99.50);
System.out.println(number);
Результат этого кода будет равен 99. Дробная часть будет округлена в меньшую сторону из-за режима округления и до 0 дробных цифр.
Разбор чисел
Вы также можете использовать класс NumberFormat для синтаксического анализа чисел. Вот пример:
NumberFormat numberFormat =
NumberFormat.getInstance(new Locale("da", "DK"));
Number parse = numberFormat.parse("100,00");
System.out.println(parse.intValue());
Выходные данные, напечатанные в результате выполнения этого кода, будут следующими:
100
Как вы можете видеть, число в проанализированной строке использует запятую (,) в качестве разделителя между целой частью и дробной частью числа. Поскольку NumberFormat создается с использованием экземпляра датской локали, эта строка анализируется правильно со значением 100.
Если бы экземпляр NumberFormat был создан с использованием экземпляра языка Великобритании, число было бы проанализировано до 10000, поскольку запятая интерпретировалась бы как разделитель целых чисел (например, разделитель тысяч), а не как разделитель дробей.
#java #перевод #интернационализация #i18n