Таблица 22.4. Спецификаторы формата числовых данных Спецификатор Формат Назначение спецификатора точности С Денежная единица Задает количество десятичных разрядов с То же, что и С D Целочисленный (используется только с целыми числами) Задает минимальное количество цифр. При необходимости результат дополняется начальными нулями d То же, что и D Е Экспоненциальное представление чисел (в обозначении используется прописная буква Е) Задает количество десятичных разрядов. По умолчанию используется шесть разрядов е Экспоненциальное представление чисел (в обозначении используется строчная буква е) Задает количество десятичных разрядов. По умолчанию используется шесть разрядов F Представление чисел с фиксированной точкой Задает количество десятичных разрядов f То же, что и F G Используется более короткий из двух форматов: Е или F См. спецификаторы Е и F g Используется более короткий из двух форматов: е или f См. спецификаторы е и f N Представление чисел с фиксированной точкой (и запятой в качестве разделителя групп разрядов) Задает количество десятичных разрядов n То же, что и N Р Проценты Задает количество десятичных разрядов Р То же, что и Р R или r Числовое значение, которое преобразуется с помощью метода Parse в эквивалентную внутреннюю форму. (Это так называемый "круговой" формат) Не используется X Шестнадцатеричный (в обозначении используются прописные буквы A-F) Задает минимальное количество цифр. При необходимости результат дополняется начальными нулями X Шестнадцатеричный (в обозначении используются строчные буквы A-F) Задает минимальное количество цифр. При необходимости результат дополняется начальными нулями
Как пояснялось выше, конкретное действие спецификаторов формата зависит от текущих настроек параметров культурной среды. Например, спецификатор денежной единицы С автоматически отображает числовое значение в формате денежной едини цы, выбранном для локализации программного обеспечения в конкретной культурной среде. Для большинства пользователей используемая по умолчанию информация о культурной среде соответствует их региональным стандартам и языковым особенно стям. Поэтому один и тот же спецификатор формата может использоваться без учета культурного контекста, в котором выполняется программа.
В приведенной ниже программе демонстрируется применение нескольких специ фикаторов формата числовых данных. // Продемонстрировать применение различных // спецификаторов формата числовых данных. using System; class FormatDemo { static void Main { double v = 17688.65849; double v2 = 0.15; int x = 21; Console.WriteLine("{0:F2}", v); Console.WriteLine("{0:N5}", v); Console.WriteLine("{0:e}", v); Console.WriteLine("{0:r}", v); Console.WriteLine("{0:p}", v2); Console.WriteLine("{0:X}", x); Console.WriteLine("{0:D12}", x); Console.WriteLine("{0:C}", 189.99); } }
Эта программа дает следующий результат. 17688.66 17.688.65849 1.768866е+004 17688.65849 15.00 % 15 000000000021 $189.99
Обратите внимание на действие спецификатора точности в нескольких форматах. Представление о номерах аргументов
Следует иметь в виду, что аргумент, связанный со спецификатором формата, опре деляется номером аргумента, а не его позицией в списке аргументов. Это означает, что один и тот же аргумент может указываться неоднократно в одном вызове метода WriteLine. Эта также означает, что аргументы могут отображаться в той последо вательности, в какой они указываются в списке аргументов. В качестве примера рас смотрим следующую программу. using System; class FormatDemo2 { static void Main { // Форматировать один и тот же аргумент тремя разными способами. Console.WriteLine("{0:F2} {0:F3} {0:е}", 10.12345); // Отобразить аргументы не по порядку. Console.WriteLine("{2:d} {0:d} {l:d}", 1, 2, 3); } }
Ниже приведен результат выполнения этой программы. 10.12 10.123 1.012345е+001 3 1 2
В первом операторе вызова метода WriteLine один и тот же аргумент 10.12345 форматируется тремя разными способами. Это вполне допустимо, поскольку каждый спецификатор формата в этом вызове обозначает первый и единственный аргумент. А во втором вызове метода WriteLine три аргумента отображаются не по порядку. Не следует забывать, что каких-то особых правил, предписывающих обозначать аргу менты в спецификаторах формата в определенной последовательности, не существует. Любой спецификатор формата может обозначать какой угодно аргумент. Применение методов String.Format и ToString для форматирования данных