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

на главную - закладки

Жанры

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

Ниже приведен вариант предыдущего примера программы форматирования, из мененный с целью продемонстрировать применение метода 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("С");

Обратите внимание на то, что спецификатор формата передается методу ToString непосредственно. В отличие от встроенных команд форматирования, ис пользуемых в вызовах методов WriteLine и Format, где для этой цели допол нительно указываются номер аргумента и ширина поля, в вызове метода ToString

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

Несмотря на всю полезность предопределенных спецификаторов формата число вых данных, в C# предоставляется также возможность

определить пользовательский, т.е. свой собственный, формат, используя средство, называемое форматом изображе ния. Своим происхождением термин формат изображения обязан тому обстоятельству, что специальный формат пользователь определяет, задавая пример внешнего вида (т.е. изображение) выводимых данных. Такой подход вкратце упоминался в части I этой книги, а здесь он рассматривается более подробно. Символы-заполнители специального формата числовых данных

Когда пользователь определяет специальный формат, он задает этот формат в виде примера (иди изображения) того, как должны выглядеть выводимые данные. Для этой цеди используются символы, перечисленные в табл. 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

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

Поделиться:
Популярные книги

Начальник милиции. Книга 5

Дамиров Рафаэль
5. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 5

Папина дочка

Рам Янка
4. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Папина дочка

Возвышение Меркурия. Книга 8

Кронос Александр
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8

АллатРа

Новых Анастасия
Научно-образовательная:
психология
история
философия
обществознание
физика
6.25
рейтинг книги
АллатРа

Золушка вне правил

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.83
рейтинг книги
Золушка вне правил

Возвышение Меркурия. Книга 5

Кронос Александр
5. Меркурий
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 5

На Ларэде

Кронос Александр
3. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
На Ларэде

Барон Дубов 6

Карелин Сергей Витальевич
6. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов 6

Ротмистр Гордеев

Дашко Дмитрий Николаевич
1. Ротмистр Гордеев
Фантастика:
фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Ротмистр Гордеев

Кодекс Крови. Книга VI

Борзых М.
6. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VI

Лучше подавать холодным

Аберкромби Джо
4. Земной круг. Первый Закон
Фантастика:
фэнтези
8.45
рейтинг книги
Лучше подавать холодным

Звездная Кровь. Изгой

Елисеев Алексей Станиславович
1. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой

Крестоносец

Ланцов Михаил Алексеевич
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12