Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 152
Текст из файла (страница 152)
Следовательно, от положения спецификатора формата в форматирующей строке зависит, где именно будут отображаться соответствующие данные. А номер аргумента определяет конкретный форматируемый аргумент. Если в команде форматирования указывается параметр гклс, то данные отображаются в указываемом формате. В противном случае используется формат, выбираемый по умолчанию. Если же в команде форматирования указывается параметр мйг(С)к, то выводимые данные дополняются пробелами для достижения минимально необходимой ширины поля.
При положительном значении параметра мук(СЛ выводимые данные выравниваются по правому краю, а при отрицательном значении — по левому краю. Оставшаяся часть данной главы посвящена вопросам форматирования и отдельным спецификаторам формата. Спецификаторы формата числовых данных Для числовых данных определено несколько спецификаторов формата, сведенных в табл.
22.4. Каждый спецификатор формата может включать в себя дополнительный, но необязательный спецификатор точности. Так, если числовое значение требуется указать 770 Часть!1. Библиотека Сз в формате с фиксированной точкой и двумя десятичными разрядами в дробной части, то для этой цели служит спецификатор Г2. Как пояснялось выше, конкретное действие спецификаторов формата зависит от текущих настроек параметров культурного характера.
Например, спецификатор денежной единицы с автоматически отображает числовое значение в формате денежной единицы, выбранном для локализации программного обеспечения в конкретной культурной среде. Для большинства пользователей используемая по умолчанию информация культурного характера соответствует их региональным и языковым особенностям. Поэтому один и тот же спецификатор формата может использоваться без учета культурного контекста, в котором выполняется программа.
В приведенной ниже программе демонстрируется применение нескольких спецификагоров формата числовых данных. // Продемонстрировать применение различных // спецификаторов формата числовых данных. пятно Зуяседп с1аяя Гогиаспеыо ( ягагас хоан мафп() ( к(едьте ч = 17688.65849; к(опо1е ч2 = 0.15; 1пс х = 21; Сопяо1е.нг1се11пе("(О:Г2)", ч)7 Сопяо1е.нг1се11пе(ь(0:И5)", ч)7 Сопяо1е.нг1геьтпе("(О:е)", ч)) Сот1яо1е.нгхкеьхпе("(О:г)", ч)) Сопяо1е.нг1ГЕ11ПЕ("(О:Р)", Ч2)7 Сопяо1е.нг1се11пе("(О:Х)", х); Сопяо1е.нг1се11пе("(О:012)", х) 7 Сопяо1е.нгтсевтпе("(О:С)", 189.99)) ) ) Эта программа дает следующий результат: 17688.66 17,688.65849 1.7688ббе4004 17688.65849 15.00 $ 15 000000000021 $189.99 Обратите внимание на действие спецификатора точности в нескольких форматах.
Глава 22. Строки и форматирование 771 Таблица 22.4. Спвцификаторы формата числовых данных Спецификатор Формат Назначение спецификатора точности Задает количество десягичньи разрядов Денежная единица То же, что и с Целочисленный (используется только с целыми числами) Задает минимальнОВ ксличестВО циФР. При необходимости результат дополняет- ся начальными нулями То же, что и Р То же, что и г См. спецификаторы к и г См.
спецификаторы е и г Задает количество десятичньи разрядов Проценты Тоже, что и г Задает количество десятичных разрядов Не используется Шестнадцатеричный (в обозначении используются строчные буквы А-Е) Представление о номерах аргументов Следует иметь в виду, что аргумент, связанный со спецификатором формата, определяется номером аргумента, а ие его позицией в списке аргументов. Это означает, что один и тот же аргумент может указываться неоднократно в одном вызове метода Итаке папе ( ) .
Эта также означает, что аргументы могут отображаться в той последовательности, в какой они указываются в списке аргументов. В качестве примера рассмотрим следующую программу; Экспоненциальное представление чисел (в обозначении используется прописная буква Е) Экспаюнциальное представление чисел (в обозначении используется строчная буква е) Представление чисел с фиксированной точкой Используется более короткий иэ двух форматов: к или г Используется более короткий из двух ФоРматов: е или г Представление чисел с фиксированной точкой (и запятой в качестве разделителя групп разрядов) То же, что и н Числовое значение, которое преобразуется с помацью метода гатэе () в эквивалентную внутреннюю форму.
(Это так называемый "круговой" формат) Шеотнадцатаричный (в Обозначении используются прописные буквы А-Г) Задает количество десятичных разрядов. По уь(олчанию используется шесть ряз- РЯДОВ Задает количество десятичных разрядов. По умолчанию используется шесть раз- рядов Задает количество десятичных разрядов Задает минимальное количество цйфр. При необходимости результат дополняется начальными нулями Задает минимальное количество цифр. При необходимости результат дополняется начальными нулями 772 Часть П. Библиотека С№ нзгпч Яузсем," с1азз Гогиакпезо2 ( зкаСас уоаб Маго() ( // Форматировать один и тот зе аргумент // тремя разными способами.
Соозо1е.игГСеааое("(О:Г2) (О:ГЗ) (О:е)", 10.12345); // Отобразить аргументы не по порядку. Соозо1е . Хгаке1 1пе (" ( 2 к б) ( Ока) ( 1: З) ", 1, 2, 3); ) ) Ниже приведен результат выполнения этой программы. 10.12 10.123 1.012345е+001 3 1 2 В первом операторе вызова метода ИгасеЫпе () один и тот же аргумент 10. 12345 форматируется тремя разными способами. Это вполне допустимо, поскольку каждый спецификатор формата в этом вызове обозначает первый и единственный аргумент.
А во втором вызове метода Иг1СеЫпе () три аргумента отображаются не по порядку. Не следует забывать, что каких-то особых правил, предписывающих обозначать аргументы в спецификаторах формата в определенной последовательности, не существует. Любой спецификатор формата может обозначать какой угодно аргумент. Применение методов З~ххпд. Гохуа~ () и тоз~ххпд () для форматирования данных Несмотря на все удобства встраивания команд форматирования выводимых данных в вызовы метода Иг1СФЬ1пе (), иногда все же требуется сформировать строку, содержащую отформатированные данные, но не отображать ее сразу. Это дает возможность отформатировать данные заранее, чтобы вывести их в дальнейшем на выбранное устройство. Такая возможность особенно полезна для организации работы в среде с графическим пользовательским интерфейсом, подобной %~пк)окуз, где ввод-вывод на консоль применяется редко, а так)ке для подготовки вывода на веб-страницу.
Вообще говоря, отформатированное строковое представление отдельного значения может быть получено двумя способами. Один из них состоит в применении метода яггапч. ГогыаС (), а другой — в передаче спецификатора формата методу ТояСг1по (), относящемуся к одному из встроенных в С№ числовых типов данных. Оба способа рассматриваются далее по порядку Применение метода З~гх№ад. й.отша~ () дпя форматирования значений Для получения отформатированного значения достаточно вызвать метод Гогмас (), определенный в классе ЯСГ1пп, в соответствующей его форме. Все формы этого метода перечислены в табл. 22.5. Метод Гогклас () аналогичен методу иг1се51пе (), за исключением того, что он возвращает отформатированную строку, а не выводит ее на консоль. Глава 22.
Строки я форматирование 773 Таблица 22.В. Формы метода Гогюак () Описание Метод рпЫсс ясас1с ясгспд Гсппаг(яггспс ягг, оЬ)есС ч) Форматирует объект ч в соответствии с первой коман- дой форматирования, которая содержится в строке ясг. Возвращает копию строки я сг, в которой команда форма- тирования заменена отформатированными данными Форматирует объект ч1 в СООтвЕтетвии С пЕРвой командой форматирования, содержащейся в строке я сг, а объект ч2 — В СООтВЕтетВИИ СО ВтОрОй КОМаНдОй. ВОЗВращавт копию строки я сг, в которой команды форматирования заменены отформатированными данными ФарМатИруЕт ОбЪЕКтЫ чт, ч2 И чЗ ПО СООтВЕтетеуЮщИМ командам форматирования, содержащимся в строке я сг.
Возвращает копию строки ясг, в которой команды форма- тирования заменены отформатированными данными Форматирует значения, передаваемые в массиве ч, в со- ответствии с командами форматирования, содержащими- ся в строке ясг. Возвращает копию строки ясг, в которой команды форматирования заменены отформатированными данными Форматирует значения, передаваемые в массиве ч, в со- ответствии с командами форматирования, содержащими- ся в строке ясг, используя поставщик формата ьзсргчсг. Возвращает копию стрОки ясг, в которой команды форма- тирования заменены отформатированными данными РпЫгс ЯСагсс ЯСгспс Гогпяг(яггспс ясг, оЬОесс ч1, оЬ1есс ч2) рпЫсс ясассс ясгспс Гсгзяг(яггспд ягг, сЬ)есс ч1, сЬОесс ч2, сЬ)есг чЗ) рпЫсс ясассс яства Гсгпас(ясггпс ясг, рагазя оЬ)есС[ ) Ю рпЫсс яСаС1с ягг1пд ГогмаС(1Гсгжагргочзсег Ьзгргчог яггъпс ягг, рагапя оЬ)есС[ ) ч) // Использовать метод ЯггспС.Гсппаг() для форматирования значений.
пя1пд Яуягем; с1аяя Гсгзягпепс ( ягагвс чс1с) Масп() ( с(оиЫе ч = 17888.65849) сопЫе ч2 = 0.15; спс х = 21; ясгспс ясг = Ясгспс.гсгзас("(О:Г2)", ч); Сопяо1е.Иг1Сесзпе(ягг); ягг = ЯСг1пс.гоппаг("(О:Н5)", ч)п Сопяс1е.иг1гещпе(яСг); ясг = ясгспд.гоппас("(О:е)", ч); Сспяс1е.Игсгещпе(ягг); яСг ЯСг1пд.гоппаС("(О:г)", ч); Сспяс1е.Игсгеъспе(яСг)п ягг = ягг1пд.гоппаС("(О:р)", ч2); Сопяс1е.игсгеъапе(яСг); Ниже приведен вариант предыдущего примера программы форматирования, переделанный с целью продемонстрировать применение метода ЯСг1пп. ГсгпаС () .