Форматирование чисел

Вещественное число 9.99 есть всего лишь число. Но если мы знаем, что на самом деле оно отражает денежную сумму, мы можем отформатировать строку так, что при выводе будет напечатано 9,99р. Вот как этого можно достичь:

Console.WriteLine("На счет поступила сумма {0:c}", 9.99);

В кавычках, ограничивающих строковое выражение, в нашем случае вставлены форматирующие символы {0:c}, которые определяют заполнитель, то есть место, которое при выводе будет заменяться заменителем в соответствии с требуемым форматом. Заменитель указывается после запятой — в нашем случае 9.99.

В заполнителе первым символом должна быть цифра 0, 1, 2 и т. д. Эта цифра указывает, какой по счету заменитель должен выводиться вместо данного заполнителя. В нашем примере используется единственный заменитель, поэтому в заполнителе указана цифра 0. На практике количество заменителей может быть любым.

Вслед за цифрой в заполнителе через двоеточие может указываться буква, определяющая требуемый формат преобразования. В нашем примере буква с задает денежный формат, поэтому будет выведена такая строка:

На счет поступила сумма 9,99р.

Заметьте, что символ денежной единицы и разделитель целой и дробной частей вещественного числа определяются локализацией Windows. Я использую русскоязычную версию этой операционной системы. В англоязычной версии была бы напечатана такая строка:

На счет поступила сумма $9.99

В табл. 4.1 представлены спецификаторы форматирования чисел.

Таблица 4.1. Спецификаторы форматирования чисел

Спецификатор

Влияние на формат

С или с

Используется для вывода числа в денежном формате

E или e

Выводит вещественное число в экспоненциальном формате

F или f

Выводит вещественное число с фиксированной точкой. Сразу за символом можно указать требуемое количество знаков после точки (запятой)

G или g

Использует формат F или Е в зависимости от размера числа

N или n

Представляет число с разделителями тысяч. Сразу за символом можно указать требуемое количество знаков после точки (запятой)

X или x

Выводит целое число в шестнадцатеричном формате. Если символ формата — прописной, все буквы шестнадцатеричного представления также будут прописными

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

В листинге 4.1 представлена программа, иллюстрирующая применение описанных спецификаторов форматирования (файл Ch04\Formatting\Program.cs).

Листинг 4.1. Форматирование чисел

using System;

using System.Collections.Generic;

using System.Text;

namespace Formatting

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Нет формата, требуется 15 позиций: {0, 15}", 123456789);

Console.WriteLine("Формат С: {0:C}", 123456789);

Console.WriteLine("Формат F9: {0:F9}", 1234.56789);

Console.WriteLine("Формат G: {0:G}", 123456789);

Console.WriteLine("Формат N5: {0:N5}", 123456.789);

Console.WriteLine("Формат X: {0:X}", 123456789);

Console.WriteLine("Формат x: {0:x}", 123456789);

Console.ReadLine();

}

}

 

Форматирование данных можно осуществлять одновременно с их преобразованием. Напомню, что базовый объект Object имеет метод ToString(). Все значащие типы объявлены как структуры, имеющие методы ToString(). При обращении к методу можно задать строковый параметр, определяющий спецификатор форматирования.

 

static void Main()

{

int N = 123456789;

Console.WriteLine("Нет формата, требуется 15 позиций: {0, 15}",

123456789);

Console.WriteLine("Формат C: " + N.ToString("c"));

Console.WriteLine("Формат F9: {0:F9}", 1234.56789);

Console.WriteLine("Формат G: " + N.ToString("G"));

Console.WriteLine("Формат N5: {0:N5}", 123456.789);

Console.WriteLine("Формат X: " + N.ToString("X"));

Console.WriteLine("Формат x: " + N.ToString("x"));

Console.ReadLine();

}

Предлагаю ознакомиться с аналогичными статьями: