C# 4.0 полное руководство - 2011 - Герберт Шилдт
Шрифт:
Интервал:
Закладка:
Символы-заполнители специального формата числовых данных
I
Когда пользователь определяет специальный формат, он задает этот формат в виде примера (или изображения) того, как должны выглядеть выводимые данные. Для этой цели используются символы, перечисленные в табл. 22.6. Они служат в качестве заполнителей и рассматриваются далее по очереди.
Символ точки обозначает местоположение десятичной точки.
Символ-заполнитель # обозначает цифровую позицию, или разряд числа. Этот символ может указываться слева или справа от десятичной точки либо отдельно. Так, если справа от десятичной точки указывается несколько символов #, то они обозначают количество отображаемых десятичных цифр в дробной части числа. При необходимости форматируемое числовое значение округляется. Когда же символы # указываются слева от десятичной точки, то они обозначают количество отображаемых десятичных цифр в целой части числа. При необходимости форматируемое числовое значение дополняется начальными нулями. Если целая часть числового значения состоит из большего количества цифр, чем количество указываемых символов #, то она отображается полностью, но в любом случае целая часть числового значения не усекается. В отсутствие десятичной точки наличие символа # обусловливает округление соответствующего целого значения. А нулевое значение, которое не существенно, например конечный нуль, не отображается. Правда, это обстоятельство несколько усложняет дело, поскольку при указании такого формата, как # . # #, вообще ничего не отображается, если форматируемое числовое значение равно нулю. Для вывода нулевого значения служит рассматриваемый далее символ-заполнитель 0.
Таблица 22.6. Символы-заполнители специального формата числовых данных
Символ-заполнитель
Назначение
#
Цифра
Десятичная точка
,
Разделитель групп разрядов
%
Процент
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 или п.
Символы-заполнители Е и е обусловливают отображение числовых значений в экспоненциальном представлении. В этом случае после символа Е или е должен быть указан хотя бы один нуль, хотя их может быть и больше. Нули обозначают количество отображаемых десятичных цифр. Дробная часть числового значения округляется в соответствии с заданным форматом отображения. Если указывается символ Е, то он отображается прописной буквой "Е". А если указывается символ е, то он отображается строчной буквой "е". Для того чтобы знак порядка отображался всегда, используются формы Е+ или е+. А для отображения знака порядка только при выводе отрицательных значений служат формы Е, е, Е- или е-.
Знак ; служит разделителем в различных форматах вывода положительных, отрицательных и нулевых значений. Ниже приведена общая форма пользовательского спецификатора формата, в котором используется знак ;.
положительный_формат; отрицательный_формат; нулевой_формат
Рассмотрим следующий пример.
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
Отобразить по-разному положительные, отрицательные и нулевые значения.