В феврале 28 или 2 9 дней
Как видите, значение 2 8 подставляется вместо спецификатора { 0 }, а значение 2 9 — вместо спецификатора {1}. Следовательно, спецификаторы формата обозначают место в строке, где отображаются соответствующие аргументы (в данном случае — значения 28 и 2 9). Кроме того, обратите внимание на то, что дополнительные значения разделяются запятой, а не знаком +.
Ниже приведен видоизмененный вариант предыдущего оператора, в котором указывается ширина полей.
Console.WriteLine("В феврале {0,10} или {1,5} дней.", 28, 29);
Выполнение этого оператора дает следующий результат.
В феврале 28 или 2 9 дней.
Как видите, неиспользуемые части полей заполнены пробелами. Напомним, что минимальная ширина поля определяется параметром width. Если требуется, она может быть превышена при выводе результата.
Разумеется, аргументы, связанные с командой форматирования, не обязательно должны быть константами. Ниже приведен пример программы, которая выводит таблицу результатов возведения чисел в квадрат и куб. В ней команды форматирования используются для вывода соответствующих значений.
// Применить команды форматирования.
using System;
class DisplayOptions { static void Main() { int i;
Console .WriteLine ("Число^Квадрат^Куб") ;
for(i = 1; i < 10; i++)
Console.WriteLine("{0}\t{1}\t{2}", i, i*i, i*i*i);
}
}
Результат выполнения этой программы выглядит следующим образом.
Число Квадрат Куб f
1
1
1
2
4
8
3
9
27
4
16
64
5
25
125
6
36
216
7
49
343
8
64
512
9
81
729
В приведенных выше примерах сами выводимые значения не форматировались. Но ведь основное назначение спецификаторов формата — управлять внешним видом выводимых данных. Чаще всего форматированию подлежат следующие типы данных: с плавающей точкой и десятичный. Самый простой способ указать формат данных — описать шаблон, который будет использоваться в методе WriteLine(). Для этого указывается образец требуемого формата с помощью символов #, обозначающих разряды чисел. Кроме того, можно указать десятичную точку и запятые, разделяющие цифры. Ниже приведен пример более подходящего вывода результата деления 10 на 3.
Console.WriteLine("Деление 10/3 дает: {0:#.##}", 10.0/3.0);
Выполнение этого оператора приводит к следующему результату.
Деление 10/3 дает: 3.33
В данном примере шаблон # . ## указывает методу WriteLine () отобразить два десятичных разряда в дробной части числа. Следует, однако, иметь в виду, что метод WriteLine () может отобразить столько цифр слева от десятичной точки, сколько потребуется для правильной интерпретации выводимого значения.
Рассмотрим еще один пример. Оператор
Console.WriteLine("{0:###,###.##}", 123456.56) ; дает следующий результат.
123,456.56
Для вывода денежных сумм, например, рекомендуется использовать спецификатор формата С.
decimal balance; balance = 12323.09m;
Console.WriteLine("Текущий баланс равен {0:C}", balance);
Результат выполнения этого фрагмента кода выводится в формате денежных сумм, указываемых в долларах США.
Текущий баланс равен $12,323.0 9
Форматом С можно также воспользоваться, чтобы представить в более подходящем виде результат выполнения рассматривавшейся ранее программы расчета цены со скидкой.
// Использовать спецификатор формата С для вывода // результата в местной валюте.
using System;
class UseDecimal { static void Main() { decimal price; decimal discount; decimal discounted_price;
// рассчитать цену со скидкой, price = 19.95m;
discount = 0.15m; // норма скидки составляет 15% discounted_price = price - ( price * discount);
Console.WriteLine("Цена со скидкой: {0:C}", discounted_price);
}
}
Вот как теперь выглядит результат выполнения этой программы.
Цена со скидкой: 16,96 грн.
Литералы
В C# литералами называются постоянные значения, представленные в удобной для восприятия форме. Например, число 100 является литералом. Сами литералы и их назначение настолько понятны, что они применялись во всех предыдущих примерах программ без всяких пояснений. Но теперь настало время дать им формальное объяснение.
Читать дальше