Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Герберт Шилдт. Java 2, v5.0 (Tiger). Новые возм...doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
1.21 Mб
Скачать

Задание точности представления

Спецификатор точности (precision) можно применять в спецификаторах формата: %f, %е, %g и %s. Он вставляется после спецификатора минимальной ширины поля (если таковой есть) и состоит из точки, за которой следует целое значение. Его точный смысл зависит от типа данных, для которых он определяется.

Если Вы задаете, спецификатор точности для данных с плавающей точкой, используя, спецификаторы формата: %f, %е, или %g, он задает количество выводимых десятичных знаков. Например, спецификатор %10.4f выводит число с минимальной шириной поля 10 символов и с четырьмя десятичными знаками. Принятая по умолчанию точность равна шести десятичным знакам.

Примененный к строкам спецификатор точности задает максимальную длину поля вывода. Например, спецификатор %5.7s выводит строку длиной не менее пяти и не более семи символов. Если строка длиннее, конечные символы отбрасываются.

В листинге 9.7 иллюстрируется применение спецификатора точности.

Листинг 9.7. Демонстрация применения спецификатора точности

import java.util.*;

class PrecisionDemo {

public static void main(String args[]) {

Formatter fmt = new Formatter();

// Format 4 decimal places.

fmt.format("%.4f", 123.1234567);

System.out.println(fmt);

// Format to 2 decimal places in a 16 character field.

fmt = new Formatter();

fmt.format("%16.2e", 123.1234567);

System.out.println(fmt);

// Display at most 15 characters in a String.

fmt = new Formatter();

fmt.format("%.15s", "Formatting with Java is now easy.");

System.out.println(fmt);

}

}

Далее приведен вывод результатов работы программы из листинга 9.7:

123.1235

1.23е+02

Formatting with

Применение флагов форматирования

Класс Formatter распознает набор флагов (flags) форматирования. Которые позволят Вам управлять различными аспектами преобразования. Все флаги форматирования (табл. 9.4) — это одиночные символы, следующие за знаком % в спецификаторе формата.

Таблица 9.4. Флаги форматирования

Флаг

Эффект

-

Выравнивание влево

# >■

Дополнительный преобразующий формат

0

Вывод заполняется нулями вместо пробелов

пробел (space)

Положительному значению при выводе предшествует пробел

+

Положительному значению при выводе предшествует знак +

Не все флаги применяются со всеми спецификаторами формата. В следующих разделах дано подробное объяснение действия каждого флага.

Выравнивание вывода

По умолчанию весь вывод выравнивается вправо. Это означает, что если ширина поля больше отображаемых данных, то данные будут выводиться, прижатыми к правому краю поля. Вы можете вывод выровнять влево. Поместив знак минуса сразу после символа % в спецификаторе формата. Например, спецификатор %-10.2f выводит в поле шириной 10 символов число с плавающей точкой, выровненное влево и содержащее 2 десятичных знака. В листинге 9.8 приведена программа, задающая выравнивание влево для вывода.

Листинг 9.8. Демонстрация выравнивания влево

import java.util.*;

class LeftJustify {

public static void main(String args[]) {

Formatter fmt = new Formatter();

// Right justify by default

fmt.format("|%10.2f|", 123.123);

System.out.println(fmt);

// Now, left justify.

fmt = new Formatter();

fmt.format("|%-10.2f|", 123.123);

System.out.println(fmt);

}

}

Далее приведен вывод результатов работы программы из листинга 9.8:

| 123.12|

|123-12 |

Как видите, вторая строка выровнена влево в поле шириной 10 символов.

Флаги Space, +, 0 и (

Если нужно вывести знак + перед положительными числовыми значениями, добавьте флаг +. Например, строка:

fmt.format С%+d", 100);

создаст следующую строку:

+100

При формировании колонок чисел иногда полезно вставить пробел перед положительными значениями для того, чтобы выровнять положительные и отрицательные числа. Для этого добавьте флаг пробел. В листинге 9.9 приведен пример применения этого флага.

Листинг 9.9. Демонстрация применения

import java.util.*;

class FormatDemo5 {

public static void main(String args[]) {

Formatter fmt = new Formatter();

fmt.format("% d", -100);

System.out.println(fmt);

fmt = new Formatter();

fmt.format("% d", 100);

System.out.println(fmt);

fmt = new Formatter();

fmt.format("% d", -200);

System.out.println(fmt);

fmt = new Formatter();

fmt.format("% d", 200);

System.out.println(fmt);

}

}

Далее приведен вывод программы из листинга 9.9:

-100

100

-200

200

Обратите внимание, у положительных значений есть ведущий пробел, позволяющий выровнять колонку соответствующим образом.

Для того чтобы показать отрицательные значения в скобках, а не со знаком — используйте флаг (. Например, вызов метода:

fmt. format ("% (d\ -100)

создаст следующую строку:

(100)

Флаг ) вызывает заполнение вывода нулями вместо пробелов. Этот флаг может использоваться во всех спецификаторах формата за исключением спецификатора %n.