Чтение онлайн

ЖАНРЫ

Полное руководство. С# 4.0
Шрифт:

Как пояснялось выше, конкретное действие спецификаторов формата зависит от текущих настроек параметров культурной среды. Например, спецификатор денежной единицы С автоматически отображает числовое значение в формате денежной едини цы, выбранном для локализации программного обеспечения в конкретной культурной среде. Для большинства пользователей используемая по умолчанию информация о культурной среде соответствует их региональным стандартам и языковым особенно стям. Поэтому один и тот же спецификатор формата может использоваться без учета культурного контекста, в котором выполняется программа.

В приведенной ниже программе демонстрируется применение нескольких специ фикаторов формата числовых данных. // Продемонстрировать применение различных // спецификаторов формата числовых данных. using System; class FormatDemo { static void Main { double v = 17688.65849; double v2 = 0.15; int x = 21; Console.WriteLine("{0:F2}", v); Console.WriteLine("{0:N5}", v); Console.WriteLine("{0:e}", v); Console.WriteLine("{0:r}", v); Console.WriteLine("{0:p}", v2); Console.WriteLine("{0:X}", x); Console.WriteLine("{0:D12}", x); Console.WriteLine("{0:C}", 189.99); } }

Эта

программа дает следующий результат. 17688.66 17.688.65849 1.768866е+004 17688.65849 15.00 % 15 000000000021 $189.99

Обратите внимание на действие спецификатора точности в нескольких форматах. Представление о номерах аргументов

Следует иметь в виду, что аргумент, связанный со спецификатором формата, опре деляется номером аргумента, а не его позицией в списке аргументов. Это означает, что один и тот же аргумент может указываться неоднократно в одном вызове метода WriteLine. Эта также означает, что аргументы могут отображаться в той последо вательности, в какой они указываются в списке аргументов. В качестве примера рас смотрим следующую программу. using System; class FormatDemo2 { static void Main { // Форматировать один и тот же аргумент тремя разными способами. Console.WriteLine("{0:F2} {0:F3} {0:е}", 10.12345); // Отобразить аргументы не по порядку. Console.WriteLine("{2:d} {0:d} {l:d}", 1, 2, 3); } }

Ниже приведен результат выполнения этой программы. 10.12 10.123 1.012345е+001 3 1 2

В первом операторе вызова метода WriteLine один и тот же аргумент 10.12345 форматируется тремя разными способами. Это вполне допустимо, поскольку каждый спецификатор формата в этом вызове обозначает первый и единственный аргумент. А во втором вызове метода WriteLine три аргумента отображаются не по порядку. Не следует забывать, что каких-то особых правил, предписывающих обозначать аргу менты в спецификаторах формата в определенной последовательности, не существует. Любой спецификатор формата может обозначать какой угодно аргумент. Применение методов String.Format и ToString для форматирования данных

Несмотря на все удобства встраивания команд форматирования выводимых дан ных в вызовы метода WriteLine, иногда все же требуется сформировать строку, со держащую отформатированные данные, но не отображать ее сразу. Это дает возмож ность отформатировать данные заранее, чтобы вывести их в дальнейшем на выбранное устройство. Такая возможность особенно полезна для организации работы в среде с графическим пользовательским интерфейсом, подобной Windows, где ввод-вывод на консоль применяется редко, а также для подготовки вывода на веб-страницу.

Вообще говоря, отформатированное строковое представление отдельного зна чения может быть получено двумя способами. Один из них состоит в применении метода String.Format, а другой — в передаче спецификатора формата методу ToString, относящемуся к одному из встроенных в С# числовых типов данных. Оба способа рассматриваются далее по порядку. Применение метода String.Format для форматирования значений

Для получения отформатированного значения достаточно вызвать метод Format, определенный в классе String, в соответствующей его форме. Все формы этого метода перечислены в табл. 22.5. Метод Format аналогичен методу WriteLine, за ис ключением того, что он возвращает отформатированную строку, а не выводит ее на консоль.

Таблица 22.5. Формы метода Format Метод Описание public static string Format(string format, object arg0) Форматирует объект arg0 в соответствии с первой командой форматирования, которая содержится в строке format. Возвращает копию строки format, в которой команда форматирования заменена отформатированными данными public static string Format(string format, object arg0, object arg1) Форматирует объект arg0 в соответствии с первой командой форматирования, содержащейся в строке format, а объект arg1 — в соответствии со второй командой.

Возвращает копию строки format, в которой команды форматирования заменены отформатированными данными public static string Format(string format, object arg0, object arg1, object arg2) Форматирует объекты arg0, arg1 и arg2 по соответствующим командам форматирования, содержащимся в строке format. Возвращает копию строки format, в которой команды форматирования заменены отформатированными данными public static string Format(string format, params object[] args) Форматирует значения, передаваемые в массиве args, в соответствии с командами форматирования, содержащимися в строке format. Возвращает копию строки format, в которой команды форматирования заменены отформатированными данными public static string Format(IFormatProvider provider, string format, params object[] args) Форматирует значения, передаваемые в массиве args, в соответствии с командами форматирования, содержащимися в строке format, используя поставщик формата provider. Возвращает копию строки format, в которой команды форматирования заменены отформатированными данными

Ниже приведен вариант предыдущего примера программы форматирования, из мененный с целью продемонстрировать применение метода String.Format. Этот вариант дает такой же результат, как и предыдущий. // Использовать метод String.Format для форматирования значений. using System; class FormatDemo { static void Main { double v = 17688.65849; double v2 = 0.15; int x = 21; string str = String.Format("{0:F2}", v); Console.WriteLine(str); str = String.Format("{0:N5}", v); Console.WriteLine(str); str = String.Format("{0:e}", v); Console.WriteLine(str); str = String.Format("{0:r}", v); Console.WriteLine(str); str = String.Format("{0:p}", v2); Console.WriteLine(str); str = String.Format("{0:X}", x); Console.WriteLine(str); str = String.Format("{0:D12}", x); Console.WriteLine(str); str = String.Format("{0:C}", 189.99); Console.WriteLine(str); } }

Аналогично методу WriteLine, метод String.Format позволяет встраивать в свой вызов обычный текст вместе со спецификаторами формата, причем в вызове данного метода может быть указано несколько спецификаторов формата и значений. В качестве примера рассмотрим еще одну программу, отображающую текущую сум му и произведение чисел от 1 до 10. // Еще один пример применения метода Format. using System; class FormatDemo2 { static void Main { int i; int sum = 0; int prod = 1; string str; /* Отобразить текущую сумму и произведение чисел от 1 до 10. */ for(i=1; i <= 10; i++) { sum += i; prod *= i; str = String.Format("Сумма:{0,3:D} Произведение:{1,8:D}", sum, prod); Console.WriteLine(str); } } }

Ниже приведен результат выполнения этой программы. Сумма: 1 Произведение: 1 Сумма: 3 Произведение: 2 Сумма: 6 Произведение: 6 Сумма: 10 Произведение: 24 Сумма: 15 Произведение: 120 Сумма: 21 Произведение: 720 Сумма: 28 Произведение: 5040 Сумма: 36 Произведение: 40320 Сумма: 45 Произведение: 362880 Сумма: 55 Произведение: 3628800

Обратите особое внимание в данной программе на следующий оператор. str = String.Format("Сумма:{0,3:D} Произведение:{1,8:D}", sum, prod);

В этом операторе содержится вызов метода Format с двумя спецификатора ми формата: одним — для суммы (в переменной sum), а другим — для произведения (в переменной prod). Обратите также внимание на то, что номера аргументов указы ваются таким же образом, как и в вызове метода WriteLine, и что в вызов метода Format включается обычный текст, как, например, строка "Сумма: ". Этот текст передается данному методу и становится частью выводимой строки. Применение метода ToString для форматирования данных

Для получения отформатированного строкового представления отдельного значе ния любого числового типа, которому соответствует встроенная структура, например Int32 или Double, можно воспользоваться методом ToString. Этой цели служит приведенная ниже форма метода ToString. public string ToString("форматирующая строка")

В этой форме метод ToString возвращает строковое представление вызываю щего объекта в том формате, который определяет спецификатор "форматирующая строка", передаваемый данному методу. Например, в следующей строке кода фор мируется строковое представление значения 188.99 в формате денежной единицы с помощью спецификатора формата С. string str = 189.99.ToString("С");

Поделиться с друзьями: