Нестандартные форматные строки
Однако существует и нестандартное форматирование. Нестандартные форматные строки позволяют лучше контролировать процесс форматирования, чем описанные выше стандартные форматные строки. В нестандартных форматных строках число форматируется по шаблону, состоящему из специальных символов. Все символы, не обладающие особой интерпретацией в форматной строке, непосредственно копируются в выходную строку. Рассмотрим возможности нестандартного форматирования.
Цифра или ноль
Символ 0 (ноль) обозначает позицию, в которой выводится цифра или ноль. Если в разряде числа, обозначенном в форматной строке символом 0, находится цифра, то она включается в результат. В противном случае в этой позиции выводится ноль.
Пример 3.31:
using System;
class Test
{
public static void Main()
{
Console.WriteLine("{0:000}", 55);
Console.WriteLine("{0:000}", 1456);
}
}
В примере выводится следующий результат:
Цифра или пробел
Символ # (фунт) обозначает позицию, в которой выводится цифра или пробел. Он полностью аналогичен символу 0, за исключением того, что при отсутствии цифры разряд остается пустым.
Пример 3.32:
using System;
class Test
{
public static void Main()
{
Console.WriteLine("{0:#####}", 255);
Console.WriteLine("{0:#####}", 1456);
Console.WriteLine("{0:###}", 32767);
}
}
В примере выводится следующий результат:
Десятичный разделитель
Символ. (точка), находящийся в форматной строке, определяет позицию десятичного разделителя в результате. Символ, используемый в качестве десятичного разделителя в отформатированной строке, определяется экземпляром NumberFormatInfo.
Пример 3.33:
using System;
class Test
{
public static void Main()
{
Console.WriteLine("{0:#####.000}", 75928.3);
Console.WriteLine("{0:##.000}", 1456.456456);
|
}
}
В примере выводится следующий результат:
75928.300
1456.456
Разделитель групп разрядов
Символ, (запятая) используется для разделения групп разрядов. Если запятая находится среди цифровых позиций слева от десятичного разделителя (если он есть), в строку вставляется разделитель групп разрядов. Символ, используемый в качестве разделителя групп в отформатированной строке, и количество разрядов, объединяемых в одну группу, определяется экземпляром NumberFormatInfo.
Пример 3.34:
using System;
class Test
{
public static void Main()
{
Console.WriteLine("{0:##,###}", 2555634323);
Console.WriteLine("{0:##,000.000}", 14563553.593993);
Console.WriteLine("{0:#,#.000}", 14563553.593993);
}
}
В примере выводится следующий результат:
2,555,634,323
14,563,553.594
14,563,553.594
Масштабный коэффициент
Символ, (запятая) также используется как признак масштабирования числа. В этом случае он ставится сразу же после точки или в конце форматной строки.
Для каждой запятой, находящейся в этой позиции, число перед форматированием делится на 1000.
Пример 3.35:
using System;
class Test
{
public static void Main()
{
Console.WriteLine("{0:000,.##}", 158847);
Console.WriteLine("{0:000,,,.###}", 1593833);
}
}
В примере выводится следующий результат:
158.85
000.002
Процентная запись
Символ % (процент) означает, что число должно выводиться в процентах. Перед форматированием число умножается на 100.
Пример 3.36:
using System;
class Test
{
public static void Main()
{
Console.WriteLine("{0:##.000%}", 0.89144);
Console.WriteLine("{0:00%}", 0.01285);
}
}
В примере выводится следующий результат:
89.144%
01%
Экспоненциальная запись
Если символы E+0, E-0, e+0 или e-0 находятся в форматной строке сразу же после символа # или 0, число форматируется в экспоненциальной записи. Количеств цифр в экспоненте определяется количеством символов 0 в спецификаторе экспоненты. Символ E или e копируется прямо в отформатированную строку. Символ «+» означает, что в данной позиции выводится плюс или минус, а символ «-» говорит о том, что в данной позиции выводится только минус для отрицательных чисел.
|
Пример 3.37:
using System;
class Test
{
public static void Main()
{
Console.WriteLine("{0:###.000E-00}", 3.1415533E+04);
Console.WriteLine("{0:#.0000000E+000}", 2.553939939E+101);
}
}
В примере выводится следующий результат:
314.155E-02
2.5539399E+101
Разделитель секций
Символ; (точка с запятой) разделяет секции форматной строки, используемые для форматирования числа в зависимости от того, является ли оно положительным, равным нулю или отрицательным. Если форматная строка состоит только из двух секций, первая секция относится к положительным и нулевым значениям, а вторая – к отрицательным значениям. Если строка состоит из трех секций, они относятся соответственно к положительным, нулевым и отрицательным значениям.
Пример 3.38:
using System;
class Test
{
public static void Main()
{
Console.WriteLine("{0:###.00;(###.00);0}", -456.55);
Console.WriteLine("{0:###.00;(###.00);0}", 0);
Console.WriteLine("{0:###.00;(###.00);0}", 456.55);
}
}
В примере выводится следующий результат:
(.00)
456.55
Служебные последовательности и литералы
Символ \(обратная косая черта) ставится перед теми символами, которые не должны интерпретироваться как символы форматирования. Поскольку символ \ уже обладает самостоятельным значением в литералах C#, в таких строках проще использовать признак неинтерпретируемого синтаксиса @; в противном случае один символ \ в выходной строке генерируется при помощи двух символов \\.
|
Последовательности неинтерпретируемых символов можно задавать, заключая их в апострофы. Иногда это бывает удобнее, чем использовать символ \.
Пример 3.39:
using System;
class Test
{
public static void Main()
{
Console.WriteLine("{0:###\\#}", 255);
Console.WriteLine(@"{0:###\#}", 255);
Console.WriteLine("{0:###'#0%;'}", 1456);
}
}
В примере выводится следующий результат:
255#
255#
1456#0%;