Изучаем Java

Вы здесь: Главная >> Java-учебник >> Форматирование вывода в Java

Форматирование вывода в языке Java


Форматирование вывода

Число х можно вывести на консоль с помощью оператора System.out. println (x). Эта команда напечатает число х с максимальным количеством ненулевых цифр, допустимым для данного типа чисел. Например, код
х = 10000.0 / 3.0;
System.out.print(х);

выведет на экран число

3333.3333333333335

Это создает проблемы, если вы хотите, например, вывести на экран количество долларов и центов.

Чтобы сделать ваш вывод более аккуратным, можно управлять его форматом. Класс Number Format в пакете java.text имеет три метода, предоставляющих стандартные средства форматирования для

  • чисел;
  • денежных сумм;
  • процентов.

Допустим, что по умолчанию вы пользуетесь американским национальным стандартом. (Национальный стандарт (local) — это множество спецификаций строк и чисел, характерных для данной страны, например, порядок следования чисел в датах, символ денежной единицы и т.д. Национальный стандарт — важное понятие при создании интернационализированных приложений— программ, доступных пользователям во всем мире. Вопросы интернационализации мы обсудим во втором томе.) Теперь значение 10000.0 / 3.0 с помощью трех форматов будет напечатано в следующем виде:

3,333.333
$3,333.33
333,333%

Как видим, средства форматирования добавляют запятые для разделения тысяч, символ денежной единицы ($) и знак процента.

Чтобы получить средства форматирования для национального стандарта по умолчанию, используется один из трех методов.

NumberFormat.getNumberlnstance()
NumberFormat. getCurrencylnstance()
NumberFormat.getPercentlnstance()

Каждый из этих методов возвращает объект, имеющий тип NumberFormat. Этот объект можно использовать для форматирования одного или нескольких чисел. Затем, чтобы получить строку, содержащую отформатированное число, к объекту типа NumberFormat нужно применить метод format. Получив отформатированную строку, возможно, вы просто выведете ее на экран.

double х - 10000.0/3.0;
NumberFormat formatter = NumberFormat.getNumberInstance();
String s = formatter.format(x); // Строка "3,333.33".
System.out.println(s);

Если вы захотите задать минимальное и максимальное количество цифр в целой или дробной части числа, можете воспользоваться методами setMinimumlntegerDigits
setMinimumFractionDigits, setMaximumlntegerDigits и setMaximumlnteger Digits из класса NumberFormat.

double x = 10000.0/3.0;
NumberFormat formatter = NumberFormat.getNumberlnstance();
formatter.setMaximumFraction(4);
formatter.setMinimumlntegerDigits (6);
String s = formatter.format (x); // Строка "003,333.3333".

Установка максимального количества цифр в дробной части нередко оказывается полезной. Последняя отображаемая цифра увеличивается на единицу, если отброшенная цифра равна или больше 5. Если нужно отобразить замыкающие нули, то минимальное количество цифр в дробной части должно быть разным их максимальному количеству. В противном случае следует оставить минимальное количество цифр в дробной части равным его значению по умолчанию, т.е. 0.

Установка количества цифр в целой части числа используется намного реже. Задавая это количество, пользователь вынуждает средства форматирования вставлять ведущие нули перед маленькими числами. Совершенно очевидно, что указывать максимальное количестве цифр в целой части опасно — отображаемое число будет усечено, что приведет к более красиво отформатированному, но неверному результату.

Если вы знакомы с функцией printf из языка С и обожаете ее простоту, проверьте
класс Format, приведенный на Web-странице horstmann.com corejava.html . Это класс из языка Java, который полностью воспроизводит работу функции printf . Например, оператор Format. printf ("%8.2f " , 10000.0/3.0) выводит на печать строку " 3333.33" (с ведущим пробелом, который необходим, чтобы ширина поля равнялась 8, и двумя цифрами после десятичной точки).

Существуют также форматы, соответствующие другим национальным стандартам. Например, рассмотрим числовые форматы, принятые в Германии, и выведем на экран тест. Существует встроенный объект под именем Locale . GERMANY, имеющий тип Locale, в котором хранятся правила форматирования чисел в соответствии с национальным стандартом Германии. Передавая объект типа Locale методу GetNumberlnstance, мы получим нужные нам средства форматирования.

double х = 10000.0/3.0;
NumberFormat formatter
= NumberFormat.getNumberInstance(Locale.GERMANY);
System.out.println(formatter.format(x) ) ;
formatter = NumberFormat.getCurrencylnstance(Locale.GERMANY);
System.out.printIn(formatter.format(x));
Этот фрагмент кода выведет на печать следующие числа:
3.333,333
3.333,33 DM

Заметим, что принятые в Германии правила употребления точек и запятых в числах в точности противоположны американским: запятая используется в качестве десятичного разделителя, а точка— в качестве разделителя тысяч. Кроме того, средства форматирования учитывают, что знак денежной единицы (DM) указывается после числа.

java.text.NumberFormat 1.1

- static NumberFormat getCurrencylnstance ()
Возвращает объект, имеющий тип NumberFormat, для преобразования значений денежной единицы в строку, пользуясь установленным национальным стандартом.

- static NumberFormat getNumberlnstance ()
Возвращает объект, имеющий тип NumberFormat, для форматирования чисел в соответствии с установленным национальным стандартом.

- static NumberFormat getPercentlnstance ()
Возвращает объект, имеющий тип NumberFormat, для преобразования процентов в строки.

- String format (double number)
Возвращает строку, содержащую отформатированное число.

- void setMaximumFractionDigits(int digits)
Параметры: digits Количество отображаемых цифр.
Устанавливает максимальное количество цифр после десятичной точки в форматируемом объекте. Последняя отображаемая цифра округляется.

- void setMaximumlntegerDigits(int digits)
Параметры: digits Количество отображаемых цифр.
Устанавливает максимальное количество цифр перед десятичной точкой в форматируемом объекте. Используйте этот метод с предельной осторожностью. Если вы зададите слишком мало цифр, число будет просто усечено, и результат станет совершенно неправильным!

- void setMinimumFractionDigits(int digits)
Параметры: digits Количество отобрижаемых цифр.
Устанавливает минимальное количество цифр после десятичной точки в форматируемом объекте. Если количество цифр в дробной части числа меньше минимального, то на экран выводятся замыкающие нули.

- void setMinimumlntegerDigits(int digits)
Параметры: digits Количество отображаемых цифр.
Устанавливает минимальное количество цифр перед десятичной точкой в форматируемом объекте. Если количество цифр в целой части числа меньше минимального, то на экран выводятся ведущие нули.


Партнеры сайта