Г. Шилдт - С#4.0 Полное руководство (1160795), страница 163
Текст из файла (страница 163)
В качестве примера рассмотрим следующую программу. вя1пд Буясеяо с1аяя гогеасОеио2 ( ягагьс тогг( Ма1п() ( Форматировать один и тот же аргумент тремя разными способами. Сопяо1е.иггке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 од ( ), относящемуся к одному из встроенных в С() числовых типов данных. Оба способа рассматриваются далее по порядку. Применение метода Вопд. Рохша~ () для форматирования значений Для получения отформатированного значения достаточно вызвать метод Гогваг ( ), определенный в классе Бггьпд, в соответствующей его форме. Все формы этого метода Глава 22.
Строки и форматирование 817 перечислены в табл. 22.5. Метод Гогвас () аналогичен методу нг1сеъдпе (), за исключением того, что он возвращает отформатированную строку, а не выводит ее на консоль. Таблица 22.5. Формы метода ГогввЬ () Описание Метод рнЬ11с ясагдс яТггпд Гогвас(ясг1пд Гогваг, оЬбесс агдО) Форматирует объект агдО в соответствии с первой командой форматирования, которая содержится в строке Гогва г. Возвращает копию строки Гоггпа г, в которой команда форматирования заменена отформатированными данными Форматирует объект агдО в соответствии с первой командой форматирования, содержащейся в строке Гогва с, а объект агд1 — в соответствии со второй командой. Возвращает копию строки Гогвас, в кОтОрОй команды форматирования заменены отформатированными данными Форматирует объекты агдО, агд1 и агд2 по соответствующим командам форматирования, содержащимся в строке Гогва в Возвращает копию строки Гоггла г, в которой команды форматирования заменены отформатированными данными Форматирует значения, передаваемые в массиве агдя, в соответствии с командами форматирования, содержащимися в строке Гогва Г.
Возвращает копию строки Гогва г, в которой команды форматирования заменены отформатированными данными Форматирует значения, передаваемые в массиве агдя, в соответствии с командами форматирования, содержащимися в строке Гогвас, используя поставщик формата ргоч1г(ег. Возвращает копию строки Готта С, в которой команды форматирования заменены отформатированными данными рпЫГс ясаГгс ясг1пд Гогвас(ясггпд Гогвас, оЬбесг агдО, оЬ1есь агд1) рцЫ1с ягагдс ясг1пд Гогвас(ясгфпд Гогвас, оЬ1есг агдО, оЬ1есс агд1, оЬ>есс агд2) рпЫ1с ясасдс ясггпд Гогвас(ясг1пд Гогваг, рагавя оЬ1есс[) агдя) рнЫ1с ягасфс ягг1пд Гогваь(1ГогваьРгоч1г(ег ргоч1г(ег, ясгдпд Гогтас, рагавя оЬ1есг[) агдя) // Использовать метод Ясг1пд.Гогваб() для форматирования значений. нягпд яуятев; о1а*я Гогвабоева ятабго чогд Нагл() ( оооЬ1е ч = 17688.858497 Ооище ч2 = 0.15; ыю х = 21; ятг)пд яог = ятггпд.гопвас("(С:Г2) ", ч); Ниже приведен вариант предыдущего примера программы форматирования, измененный с целью продемонстрировать применение метода Яггдпд.
Гогвас () . Этот вариант дает такой же результат, как и предыдущий. 818 Часть (1. Библиотека С() Сопво1е.Хггсеьгпе (ясг) Ясг = Бсг1пч.гогшас("(О:ХБ)", ч); Сопво1е.Хггсеььпе(яяг); ятг = Бсг1пч.гогшаг("(О:е)", ч): Сопяо1е.иггяевьпе(вяг)) всг = Бяг1пч.гогшас ("(О:г)", н); Сопяо1е.игггеЬ1пе(ягг)2 ясг = Бсг1пч.гогшая("(О:р)", ч2): Сопяо1е.иггсе11пе(ясг); ясг = Бсг1пч.гогшас("(Оги)", х); Сопво1е.иггсе11пе(ясг); в( г = Бтг(по Гоплап (" (О: 012]", х); Сопяо1е.иг1сеь1пе(вяг)) вгг = Бсг1пч.гоппая("(О:С)", 189.99)," Сопяо1е.иггсебгпе(ясг); ) ) Аналогично методу хг1сеп1пе (), метод Бсг1по. Гогшас () позволяет встраивать в свой вызов обычный текст вместе со спецификаторами формата, причем в вызове данного метода может быть указано несколько спецификаторов формата и значений.
В качестве примера рассмотрим еще одну программу, отображающую текущую сумму и произведение чисел от 1 до 10. Еше один пример применения метода Гогшая() оягпч Буягеш2 с1аяя Гогшасоешо2 ( ягаггс чогг( Маьп() ( 1пг 1) 1пг яош = О; 1пя ргой = 1; Яяг1пч всг; /* Отобразить текушую сумму и произведение чисел от 1 до 10. */ Гог(а=12 1 <= 10; 1е+) ( вош += 1; ргоб *= ).; яяг = Бяггпч.гогшаг("Сумма:(О,З:О) Произведение:(1,8:О)", яош, ргоб); Сопяо1е.иггсе11пе(ясг); ) ) ) Ниже приведен результат выполнения этой программы. Глава 22. Строки н Форматирование 819 Обратите особое внимание в данной программе на следующий оператор.
ятг = Яттгпч.ротпат("Сумма:(0,3:Р) Произведение:(1,8:О)", яоп, ргосЦ 1 В этом операторе содержится вызов метода рогпас () с двумя спецификаторами формата; одним — для суммы (в переменной зпп), а другим — для произведения (в переменной ргоа). Обратите также внимание на то, что номера аргументов указываются таким же образом, как и в вызове метода нгг гег фпе (), и что в вызов метода рогпас () включается обычный текст, как, например, строка "сумма: ".
Этот текст передается данному методу и становится частью выводимой строки. применение метода тоБшт)д () д()я форматирования данных Для получения отформатированного строкового представления отдельного значения любого числового типа, которому соответствует встроенная структура, например 1пс32 или ПосЬ1е, можно воспользоваться методом ТоЯСг1п9 () . Этой цели служит приведенная ниже' форма метода ТоЯГг1п9 () . роЬ11с ягтфпч Тозтг1по("форматиругщая строка") В этой форме метод Тоэгг109 () возвращает строковое представление вызывающего объекта в том формате, который определяет спецификатор "форматирующая строка", передаваемый данному методу. Например, в следующей строке кода формируется строковое представление значения 188.99 в формате денежной единицы с помощью спецификатора формата С.
Ясггпч Ятт = 189.99.тозтг1по("С")7 Обратите внимание на то, что спецификатор формата передается методу ТоЯСг1пд () непосредственно. В отличие от встроенных команд форматирования, используемых в вызовах методов Хг1се11пе () и рогпас (), где для этой цели дополнительно указываются номер аргумента и ширина поля, в вызове метода тоягг1пд () достаточно указать только спецификатор формата. Ниже приведен вариант примера предыдущей программы форматирования, измененный с целью продемонстрировать применение метода ТоЯГг1пд () для получения отформатированных строк.
Этот вариант дает такой же результат, как и предыдущий. О испольэовать метод Тозтт1пч() дла форматирования значений. оягпч Яуятеп; с1аяя Тозтггпчоепо ( ятат1с уота Наго() ( Сумма: 1 Сумма: 3 Суь.ма: б Сумма: 10 Сумма: 15 Сумма: 21 Сумма: 28 Сумма: Зб Сумма: 45 Сумма: 55 Произведение: Произведение: Произведение: Произведение: Произведение: Произведение: Произведение: Произведение: Произведение: Произведение: 1 2 б 24 120 720 5040 40320 362880 Зб28800 Е20 Часть 11. Библиотека С(1 ОопЫе ч = 17688.85849з г)ооЫе ч2 = 0.15; гпс х = 21( ясг1пч вяг = ч.ТоЯГг(пч(5В2") Сопво1е.нггге11пе(всг)," всг = ч.ТоБГгьпч("Н5"); Сопяо1е.нг1сеьгпе(ясг)( ЯГГ = Ч.ТОЯГГТПБ("Е")( Сопво1е.нг1сеыпе (впг); Ятг = Ч.ТОБГГТПЯ( Г ) ( Сопво1е.нгьсеыпе (ясг) ( Всг = ч2.ТОЯГГ1ПЯ("Р")( Сопяо1е.нггсеььпе(ясг); ЯГГ = Х.ТОЯГГТПЯ( Х )( Сопво1е.нггсеЬгпе(всг); ВГГ = х.ТОБГГ1ПЯ("Р12")( Сопво1е.нггге11пе(всг)з ЯГГ = 189.99.ТОЯГГТП9("С")( Сопво1е.иг1геьтпе(япг)( Определение пользовательского формата числовых данных Несмотря на всю полезность предопределенных спецификаторов формата числовых данных, в С)) предоставляется также возможность определить пользовательский, т.е.
свой собственный, формат, используя средство, называемое форматом изображенияя. Своим происхождением термин форман( изображения обязан тому обстоятельству, что специальный формат пользователь определяет, задавая пример внешнего вида (т.е. изображение) выводимых данных. Такой подход вкратце упоминался в части 1 этой книги, а здесь он рассматривается более подробно.
Символы-заполнители специального формата числовых данных Когда пользователь определяет специальный формат, он задает этот формат в виде примера (или изображения) того, как должны выглядеть выводимые данные. Для этой цели используются символы, перечисленные в табл. 22.6. Они служат в качестве заполнителей и рассматриваются далее по очереди. Символ точки обозначает местоположение десятичной точки. Символ-заполнитель () обозначает цифровую позицию, или разряд числа. Этот символ может указываться слева или справа от десятичной точки либо отдельно.
Так, если справа от десятичной точки указывается несколько символов (), то они обозначают количество отображаемых десятичных цифр в дробной части числа. При Глава 22. Строки и форматирование 821 необходимости форматируемое числовое значение округляется. Когда же символы № указываются слева от десятичной точки, то они обозначают количество отображаемых десятичных цифр в целой части числа. При необходимости форматируемое числовое значение дополняется начальными нулями. Если целая часть числового значения состоит из большего количества цифр, чем количество указываемых символов №, то она отображается полностью, но в любом случае целая часть числового значения не усекается. В отсутствие десятичной точки наличие символа № обусловливает округление соответствующего целого значения. А нулевое значение, которое не существенно, например конечный нуль, не отображается.