14 подписчиков

Форматы чисел в Java

Класс 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