Выбрать главу

Для вывода денежных сумм, например, рекомендуется использовать спецификатор формата С. decimal balance; balance = 12323.09m; Console.WriteLine("Текущий баланс равен {0:С}" , balance);

Результат выполнения этого фрагмента кода выводится в формате денежных сумм, указываемых в долларах США. Текущий баланс равен $12,323.09

Форматом С можно также воспользоваться, чтобы представить в более подходя щем виде результат выполнения рассматривавшейся ранее программы расчета цены со скидкой. // Использовать спецификатор формата С для вывода // результата в местной валюте. 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:С}", discounted_price); } }

Вот как теперь выглядит результат выполнения этой программы. Цена со скидкой: 16,96 грн. Литералы

В C# литералами называются постоянные значения, представленные в удобной для восприятия форме. Например, число 100 является литералом. Сами литералы и их назначение настолько понятны, что они применялись во всех предыдущих примерах программ без всяких пояснений. Но теперь настало время дать им формальное объяс нение.

В С# литералы могут быть любого простого типа. Представление каждого литерала зависит от конкретного типа. Как пояснялось ранее, символьные литералы заключают ся в одинарные кавычки. Например, 'а' и '%' являются символьными литералами. Целочисленные литералы указываются в виде чисел без дробной части. Например, 10 и -100 — это целочисленные литералы. Для обозначения литералов с плавающей точкой требуется указывать десятичную точку и дробную часть числа. Например, 11.123 — это литерал с плавающей точкой. Для вещественных чисел с плавающей точкой в C# допускается также использовать экспоненциальное представление. У литералов должен быть также конкретный тип, поскольку C# является строго ти пизированным языком. В этой связи возникает естественный вопрос: к какому типу следует отнести числовой литерал, например 2,123987 или 0.23? К счастью, для от вета на этот вопрос в C# установлен ряд простых для соблюдения правил. Во-первых, у целочисленных литералов должен быть самый мелкий целочислен ный тип, которым они могут быть представлены, начиная с типа int. Таким образом, у целочисленных литералов может быть один из следующих типов: int, uint, long или ulong в зависимости от значения литерала. И во-вторых, литералы с плавающей точкой относятся к типу double.

Если вас не устраивает используемый по умолчанию тип литерала, вы можете явно указать другой его тип с помощью суффикса. Так, для указания типа long к литералу присоединяется суффикс l или L. Например, 12 — это литерал типа int, a 12L — ли терал типа long. Для указания целочисленного типа без знака к литералу присоединя ется суффикс u или U. Следовательно, 100 — это литерал типа int, a 100U — литерал типа uint. А для указания длинного целочисленного типа без знака к литералу при соединяется суффикс ul или UL. Например, 984375UL — это литерал типа ulong. Кроме того, для указания типа float к литералу присоединяется суффикс F или f. Например, 10.19F — это литерал типа float. Можете даже указать тип double, при соединив к литералу суффикс d или D, хотя это излишне. Ведь, как упоминалось выше, по умолчанию литералы с плавающей точкой относятся к типу double.

И наконец, для указания типа decimal к литералу присоединяется суффикс m или М. Например, 9.95М — это десятичный литерал типа decimal.

Несмотря на то что целочисленные литералы образуют по умолчанию значения типа int, uint, long или ulong, их можно присваивать переменным типа byte, sbyte, short или ushort, при условии, что присваиваемое значение может быть представлено целевым типом. Шестнадцатеричные литералы

Вам, вероятно, известно, что в программировании иногда оказывается проще поль зоваться системой счисления по основанию 16, чем по основанию 10. Система счисле ния по основанию 16 называется шестнадцатеричной. В ней используются числа от 0 до 9, а также буквы от А до F, которыми обозначаются десятичные числа 10, 11, 12, 13, 14 и 15. Например, десятичному числу 16 соответствует шестнадцатеричное число 10. Вследствие того что шестнадцатеричные числа применяются в программировании до вольно часто, в C# разрешается указывать целочисленные литералы в шестнадцате ричном формате. Шестнадцатеричные литералы должны начинаться с символов 0х, т.е. нуля и последующей латинской буквы "икс". Ниже приведены некоторые приме ры шестнадцатеричных литералов. count = 0xFF; // 255 в десятичной системе incr = 0x1а; // 26 в десятичной системе Управляющие последовательности символов

Большинство печатаемых символов достаточно заключить в одинарные кавычки, но набор в текстовом редакторе некоторых символов, например возврата каретки, вы зывает особые трудности. Кроме того, ряд других символов, в том числе одинарные и двойные кавычки, имеют специальное назначение в С#, поэтому их нельзя исполь зовать непосредственно. По этим причинам в C# предусмотрены специальные управ ляющие последовательности символов, иногда еще называемые константами с обратной косой чертой (табл. 3.2). Такие последовательности применяются вместо тех символов, которых они представляют.

Таблица 3.2. Управляющие последовательности символов Управляющая последовательность Описание \a Звуковой сигнал (звонок) \b Возврат на одну позицию \f Перевод страницы (переход на новую страницу) \n Новая строка (перевод строки) \r Возврат каретки \t Горизонтальная табуляция \v Вертикальная табуляция \0 Пустой символ \' Одинарная кавычка \" Двойная кавычка \ Обратная косая черта

Например, в следующей строке кода переменной ch присваивается символ табу ляции. ch = '\t';

А в приведенном ниже примере кода переменной ch присваивается символ оди нарной кавычки. ch = '\''; Строковые литералы

В С# поддерживается еще один тип литералов — строковый. Строковый литерал представляет собой набор символов, заключенных в двойные кавычки. Например сле дующий фрагмент кода: "это тест"

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

Помимо обычных символов, строковый литерал может содержать одну или не сколько управляющих последовательностей символов, о которых речь шла выше. Рас смотрим для примера программу, в которой используются управляющие последова тельности \n и \t. // Продемонстрировать применение управляющих // последовательностей символов в строковых литералах. using System; class StrDemo { static void Main() { Console.WriteLine("Первая строка\nВторая строка\nТретья строка"); Console.WriteLine("Один\tДва\tТри"); Console.WriteLine("Четыре\tПять\tШесть"); // Вставить кавычки. Console.WriteLine("\"3ачем?\", спросил он."); } }

Результат выполнения этой программы приведен ниже. Первая строка Вторая строка Третья строка Один Два Три Четыре Пять Шесть "Зачем?", спросил он.

В приведенном выше примере программы обратите внимание на то, что для пере хода на новую строку используется управляющая последовательность \n. Для выво да нескольких строк совсем не обязательно вызывать метод WriteLine() несколько раз — достаточно вставить управляющую последовательность \n в тех местах удли ненной текстовой строки (или строкового литерала), где должен происходить переход на новую строку. Обратите также внимание на то, как в текстовой строке формируется знак кавычек.

Помимо описанной выше формы строкового литерала, можно также указать бук вальный строковый литерал. Такой литерал начинается с символа @, после которого следует строка в кавычках. Содержимое строки в кавычках воспринимается без изме нений и может быть расширено до двух и более строк. Это означает, что в буквальный строковый литерал можно включить символы новой строки, табуляции и прочие, не прибегая к управляющим последовательностям. Единственное исключение составля ют двойные кавычки ("), для указания которых необходимо использовать две двой ные кавычки подряд (""). В приведенном ниже примере программы демонстрируется применение буквальных строковых литералов. // Продемонстрировать применение буквальных строковых литералов. using System; class Verbatim { static void Main() { Console.WriteLine(@"Это буквальный строковый литерал, занимающий несколько строк. "); Console.WriteLine(@"А это вывод с табуляцией: 1 2 3 4 5 6 7 8 "); Console.WriteLine(@"Отзыв программиста: ""Мне нравится С#."""); } }

Результат выполнения этой программы приведен ниже. Это буквальный строковый литерал, занимающий несколько строк. А это вывод с табуляцией: 1 2 3 4 5 6 7 8 Отзыв программиста: "Мне нравится С#."

Следует особо подчеркнуть, что буквальные строковые литералы выводятся в том же виде, в каком они введены в исходном тексте программы.

Преимущество буквальных строковых литералов заключается в том, что они позво ляют указать в программе выводимый результат именно так, как он должен выглядеть на экране. Но если выводится несколько строк, то переход на новую строку может на рушить порядок набора исходного текста программы с отступами. Именно по этой причине в примерах программ, приведенных в этой книге, применение буквальных строковых литералов ограничено. Тем не менее они приносят немало замечательных выгод во многих случаях, когда требуется форматирование выводимых результатов.

И последнее замечание: не путайте строки с символами. Символьный литерал, на пример 'X', обозначает одиночную букву типа char. А строка, состоящая из одного символа, например "X", по-прежнему остается текстовой строкой. Более подробное рассмотрение переменных