C# 4.0: полное руководство | страница 44




>Console.WriteLine("Деление 10/3 дает: " + 10.0/3.0);


который выводит следующий результат.


>Деление 10/3 дает: 3.33333333333333


В одних случаях такого вывода может оказаться достаточно, а в других — он просто недопустим. Например, в финансовых расчетах после десятичной точки принято указывать лишь два десятичных разряда.

Для управления форматированием числовых данных служит другая форма метода >WriteLine(), позволяющая встраивать информацию форматирования, как показано ниже.


>WriteLine("форматирующая строка", argO, argl, ... , argN);


В этой форме аргументы метода >WriteLine() разделяются запятой, а не знаком +. А форматирующая строка состоит из двух элементов: обычных печатаемых символов, предназначенных для вывода в исходном виде, а также спецификаторов формата. Последние указываются в следующей общей форме:


>{argnum, width: fmt}


где argnum — номер выводимого аргумента, начиная с нуля; width — минимальная ширина поля; fmt — формат. Параметры width и fmt являются необязательными.

Если во время выполнения в форматирующей строке встречается спецификатор формата, то вместо него подставляется и отображается соответствующий аргумент, обозначаемый параметром argnum. Таким образом, местоположение спецификатора формата в форматирующей строке определяет место отображения соответствующих данных. Параметры width и fmt'указывать необязательно. Это означает, что в своей простейшей форме спецификатор формата обозначает конкретный отображаемый аргумент. Например, спецификатор { 0 } обозначает аргумент агдО, спецификатор {1} — аргумент argl и т.д.

Начнем с самого простого примера. При выполнение оператора


>Console.WriteLine("В феврале {0} или {1} дней.", 28, 29);


получается следующий результат.


>В феврале 28 или 29 дней


Как видите, значение 2 8 подставляется вместо спецификатора { 0 }, а значение 2 9 — вместо спецификатора {1}. Следовательно, спецификаторы формата обозначают место в строке, где отображаются соответствующие аргументы (в данном случае — значения 28 и 29). Кроме того, обратите внимание на то, что дополнительные значения разделяются запятой, а не знаком +.

Ниже приведен видоизмененный вариант предыдущего оператора, в котором указывается ширина полей.


>Console.WriteLine("В феврале {0,10} или {1,5} дней.", 28, 29);


Выполнение этого оператора дает следующий результат.


>В феврале    28 или    29 дней.


Как видите, неиспользуемые части полей заполнены пробелами. Напомним, что минимальная ширина поля определяется параметром