Числовое значение х можно вывести на консоль с помощью выражения System, out .println (х). В результате на экране отобразится число с максимальным количеством значащих цифр, допустимых для данного типа. Так, в результате выполнения приведенного ниже фрагмента кода на экран будет выведено число 3333.3333333333335.
double х = 10000.0 / 3.0; System.out.print(x);
В ряде случаев это вызывает осложнения. Так, если требуется вывести на экран сумму в долларах и центах, большое количество цифр ее затруднит восприятие.
В ранних версиях Java процесс форматирования чисел был сопряжен с определенными трудностями. К счастью, в версии Java SE 5.0 была реализована в виде метода printf () почтенная функция, хорошо известная из библиотеки С.
Например, с помощью приведенного ниже оператора можно вывести значение х в виде числа, ширина поля которого составляет 8 цифр, а дробная часть равна двум цифрам. (Число цифр дробной части иначе называется точностью.)
System.out.printf("%8.2f", x) ;
В результате на экран будет выведено семь символов, не считая начальных пробелов.
3333.33
Метод printf () позволяет задавать произвольное количество параметров. Ниже приведен пример вызова этого метода с несколькими параметрами.
System.out.printf("Hello, %s. Next year, you'll be %d", name, age);
Каждый спецификатор формата, начинающийся с символа %, заменяется соответствующим параметром. А символ преобразования, которым завершается спецификатор формата, задает тип форматируемого значения: f — число с плавающей точкой; s — символьная строка; d — десятичное число. Все символы преобразования приведены в табл. 3.5.
Таблица 3.5. Символы преобразования для метода printf ()
В спецификаторе формата могут также присутствовать флаги, управляющие форматом выходных данных. Назначение всех флагов вкратце описано в табл. 3.6. Например, запятая, указываемая в качестве флага, добавляет разделители групп. Так, в результате выполнения приведенного ниже оператора на экран будет выведена строка 3,333.33.
System.out.printf ("%,.2f", 10000.0 / 3.0);
В одном спецификаторе формата можно использовать несколько флагов, например, последовательность символов "%, (.2f" указывает на то, что при выводе будут использованы разделители групп, а отрицательные числа будут заключены в скобки.
НА ЗАМЕТКУ! Преобразование типа s можно использовать для форматирования любого объекта. Если этот объект реализует интерфейс Formattable, то вызывается метод formatTo (). В противном случае для преобразования объекта в символьную строку применяется метод toString (). Метод toString () будет обсуждаться в главе 5, а интерфейсы — в главе 6.
При работе на компьютере часто бывает необходимо спрятать свой реальный IP адрес. В этом вопросе вам поможет прокси анонимайзер, который вы сможете найти тут.
Таблица 3.6. Флаги для метода printf ()
Для составления отформатированной символьной строки без последующего ее вывода можно вызвать статический метод String.format (), как показано ниже.
String message =
String.format("Hello, %s. Next year, you'll be %d", name, age);
Несмотря на то что тип Date будет подробно рассмотрен лишь в главе 4, для того чтобы завершить обсуждение метода printf О, следует хотя бы бегло коснуться средств форматирования даты и времени. Для этой цели используется последовательность из двух символов, начинающаяся с буквы t, после которой следует одна из букв, приведенных в табл. 3.7. Ниже приведен пример такого форматирования.
System, out .printf ("%tc", new DateO);
В результате выполнения данного оператора выводятся текущая дата и время:
Mon Feb 09 18:05:19 PST 2012
Как следует из табл. 3.7, некоторые форматы предполагают отображение лишь отдельных составляющих даты — дня или месяца. Было бы неразумно многократно задавать дату лишь для того, чтобы отформатировать различные ее составляющие. По этой причине в строке, определяющей формат даты, может задаваться индекс форматируемого параметра. Индекс должен следовать сразу после знака % и завершаться знаком $, как показано ниже.
System.out.printf("%l$s %2$tB %2$te, %2$tY", "Due date:", new DateO);
В результате выполнения этой строки кода будет выведена следующая строка:
Due date: February 9, 2012
Можно также воспользоваться флагом <, который означает, что форматированию подлежит тот же самый параметр, который был отформатирован последним. Так, приведенная ниже строка кода дает точно такой же результат, как и упомянутая выше. |