Полное руководство. С# 4.0 - Шилдт Герберт
Когда пользователь определяет специальный формат, он задает этот формат в видепримера (иди изображения) того, как должны выглядеть выводимые данные. Для этойцеди используются символы, перечисленные в табл. 22.6. Они служат в качестве заполнителей и рассматриваются далее по очереди.
Символ точки обозначает местоположение десятичной точки.
Символ-заполнитель # обозначает цифровую позицию, иди разряд числа. Этотсимвол может указываться слева иди справа от десятичной точки либо отдельно.Так, если справа от десятичной точки указывается несколько символов #, то они обозначают количество отображаемых десятичных цифр в дробной части числа. Принеобходимости форматируемое числовое значение округляется. Когда же символы #указываются слева от десятичной точки, то они обозначают количество отображаемыхдесятичных цифр в целой части числа. При необходимости форматируемое числовое значение дополняется начальными нулями. Если целая часть числового значениясостоит из большего количества цифр, чем количество указываемых символов #, тоона отображается полностью, но в любом случае целая часть числового значения неусекается. В отсутствие десятичной точки наличие символа # обусловливает округление соответствующего целого значения. А нулевое значение, которое не существенно,например конечный нуль, не отображается. Правда, это обстоятельство несколькоусложняет дело, поскольку при указании такого формата, как #.##, вообще ничего неотображается, если форматируемое числовое значение равно нулю. Для вывода нулевого значения служит рассматриваемый далее символ-заполнитель 0.
Таблица 22.6. Символы-заполнители специального формата числовых данныхСимвол-заполнительНазначение#Цифра.Десятичная точка,Разделитель групп разрядов%Процент0Используется для дополнения начальными и конечными нулями;Выделяет разделы, описывающие формат для положительных, отрицательных и нулевых значенийЕ0 Е+0 Е-0 е0 е+0 е-0Экспоненциальное представление чисел
Символ-заполнитель 0 обусловливает дополнение форматируемого числового значения начальными или конечными нулями, чтобы обеспечить минимально необходимое количество цифр в строковом представлении данного значения. Этот символможет указываться как слева, как и справа от десятичной точки. Например, следующаястрока кода:Console.WriteLine("{0:00##.#00}", 21.3);
выводит такой результат.0021.300
Значения, состоящие из большего количества цифр, будут полностью отображаться слева от десятичной точки, а округленные — справа.
При отображении больших числовых значений отдельные группы цифр могут отделяться друг от друга запятыми, для чего достаточно вставить запятую в шаблон, состоящий из символов #. Например, следующая строка кода:Console.WriteLine("{0:#,###.#}", 3421.3);
выводит такой результат.3,421.3.
Указывать запятую на каждой позиции совсем не обязательно. Если указать запятую в шаблоне один раз, то она будет автоматически вставляться в форматируемомчисловом значении через каждые три цифры слева от десятичной запятой. Например,следующая строка кода:Console.WriteLine("{0:#,###.#}", 8763421.3);
дает такой результат.8,763,421.3.
У запятой имеется и другое назначение. Если запятая вставляется непосредственноперед десятичной точкой, то она выполняет роль масштабного коэффициента. Каждая запятая делит форматируемое числовое значение на 1000. Например, следующаястрока кода:Console.WriteLine("Значение в тысячах: {0:#,###,.#}", 8763421.3);
дает такой результат.Значение в тысячах: 8,763.4
Как показывает приведенный выше результат, числовое значение выводится масштабированным в тысячах.
Помимо символов-заполнителей, пользовательский спецификатор формата можетсодержать любые другие символы, которые появляются в отформатированной строкебез изменения на тех местах, где они указаны в спецификаторе формата. Например,при выполнении следующего фрагмента кода:Console.WriteLine("КПД топлива: (0:##.# миль на галлон }", 21.3);
выводится такой результат.КПД топлива: 21.3 миль на галлон
При необходимости в форматируемой строке можно также указывать такие управляющие последовательности, как t или n.
Символы-заполнители Е и е обусловливают отображение числовых значений в экспоненциальном представлении. В этом случае после символа Е или е должен бытьуказан хотя бы один нуль, хотя их может быть и больше. Нули обозначают количествоотображаемых десятичных цифр. Дробная часть числового значения округляется в соответствии с заданным форматом отображения. Если указывается символ Е, то он отображается прописной буквой "Е". А если указывается символ е, то он отображаетсястрочной буквой "е". Для того чтобы знак порядка отображался всегда, используютсяформы Е+ или е+. А для отображения знака порядка только при выводе отрицательных значений служат формы Е, е, Е- или е-.
Знак ; служит разделителем в различных форматах вывода положительных, отрицательных и нулевых значений. Ниже приведена общая форма пользовательскогоспецификатора формата, в котором используется знак ;.положительныйформат; отрицательныйформат; нулевой_форматРассмотрим следующий пример.Console.WriteLine("{0:#.##; (#.##);0.00}", num);
Если значение переменной num положительно, то оно отображается с двумя разрядами после десятичной точки. Если же значение переменной num отрицательно,то оно также отображается с двумя разрядами после десятичной точки, но в круглыхскобках. А если значение переменной num равно нулю, то оно отображается в видестроки 0.00. Когда используются разделители, указывать все части приведенной вышеформы пользовательского спецификатора формата совсем не обязательно. Так, еслитребуется вывести только положительные или отрицательные значения, нулевойформат можно опустить. (В данном случае нуль форматируется как положительноезначение.) С другой стороны, можно опустить отрицательныйформат. И в этом случае положительныйформат и нулевойформат должны разделяться точкой с запятой. А в итоге положительный_формат будет использоваться для форматирования нетолько положительных, но и отрицательных значений.
В приведенном ниже примере программы демонстрируется лишь несколько специальных форматов, которые могут быть определены пользователем.// Пример применения специальных форматов.using System;class PictureFormatDemo { static void Main() { double num = 64354.2345; Console.WriteLine("Формат по умолчанию: " + num); // Отобразить числовое значение с 2 разрядами после десятичной точки. Console.WriteLine("Значение с 2 десятичными разрядами: " + "(0:#.##)", num); // Отобразить числовое значение с 2 разрядами после // десятичной точки и запятыми перед ней. Console.WriteLine("Добавить запятые: (0:#,###.##}", num); // Отобразить числовое значение в экспоненциальном представлении. Console.WriteLine("Использовать экспоненциальное представление: " + "{0:#.###е+00}", num); // Отобразить числовое значение, масштабированное в тысячах. Console.WriteLine("Значение в тысячах: " + "(0:#0,)", num); /* Отобразить по-разному положительные, отрицательные и нулевые значения. */ Console.WriteLine("Отобразить по-разному положительные," + "отрицательные и нулевые значения."); Console.WriteLine("{0:#.#;(#.##);0.00}", num); num = -num; Console.WriteLine("{0:#.##;(#.##);0.00}", num); num = 0.0; Console.WriteLine("{0:#.##;(#.##);0.00}", num); // Отобразить числовое значение в процентах. num = 0.17; Console.WriteLine("Отобразить в процентах: {0:#%}", num); }}
Ниже приведен результат выполнения этой программы.Формат по умолчанию: 64354.2345Значение с 2 десятичными разрядами: 64354.23Добавить запятые: 64,354.23Использовать экспоненциальное представление: 6.435е+04Значение в тысячах: 64Отобразить по-разному положительные, отрицательные и нулевые значения.64354.2 (64354.23)0.00Отобразить в процентах: 17%Форматирование даты и времени