Сегодня решил вспомнить о способах форматированного вывода чисел в C#.
Существует около десятка описателей формата, благодаря которым возможен форматированный вывод чисел.
"0" –
заместитель нуля. Использование данного символа позволяет заменить ноль цифрой, если она имеется, в противном случае ноль остаётся.
double value = 987;
Console.WriteLine("{0:00000}", value);
//Результат: 00987
value = 123.125;
Console.WriteLine("{0:000000}", value);
//Результат: 00987
Console.WriteLine("{0:00000.00000}", value);
//Результат: 00123,12500
Console.WriteLine(value.ToString("00000.00000", CultureInfo.InvariantCulture));
//Результат: 00123.12500
value = 1234567890.123456;
Console.WriteLine(value.ToString("0,0", CultureInfo.InvariantCulture));
//Результат: 1,234,567,890
Console.WriteLine(value.ToString("0,0", CultureInfo.CreateSpecificCulture("el-GR")));
//Результат: 1.234.567.890
Console.WriteLine(value.ToString("0,0.0", CultureInfo.InvariantCulture));
//Результат: 1,234,567,890.1
Console.WriteLine(value.ToString("0,0.000", CultureInfo.InvariantCulture));
//Результат: 1,234,567,890.123
“#” –
заместитель цифры. Замещает знак # соответствующей цифрой, в случае, если такая имеется, в противном случае не будет выведено ничего
double value = 987;
Console.WriteLine("{0:###}", value);
//Результат: 987
value = 987654321;
Console.WriteLine("{0:###-###-###}", value);
//Результат: 987-654-321
Console.WriteLine("{0:(###) (###) (###)}", value);
//Результат: (987) (654) (321)
value = 1.23456;
Console.WriteLine("{0:#.##}", value);
//Результат: 1,23
“.” –
разделитель. Вставляет знак разделения целой и дробной части числа. Это может быть не обязательно точка, знак зависит от формата вывода в «культуре».
“,” – разделение групп и масштабирование чисел.
double value = 987.123;
Console.WriteLine("{0:###.0}", value);
//Результат: 987,1
value = 123456789;
Console.WriteLine("{0:##,###.0}", value);
//Результат: 123 456 789,0
Console.WriteLine("{0:#,##0,,}", value);
//Результат: 123
“%” –
заместитель процентов. Число в строке будет умножено на 100, вместо символа «%» будет вставлен локализованный символ процентов.
double value = 0.15;
Console.WriteLine("{0:##%}", value);
//Результат: 15%
“‰” –
заместитель промилле. Число будет умножено на 1000, вместо символа «‰» будет вставлен локализованный символ промилле.
double value = 0.0205;
Console.WriteLine("{0:#.##‰}", value);
//Результат: 20,5‰
“E” и “e” –
экспоненциальная нотация. Число формируется с использованием экспоненциальной нотации.
double value = 987654;
Console.WriteLine("{0:0.##E+0}", value);
//Результат: 9,88E+5
Console.WriteLine("{0:0.##e+0}", value);
//Результат: 9,88e+5
Console.WriteLine("{0:0.##E-0}", value);
//Результат: 9,88E5
Console.WriteLine("{0:0.##e-0}", value);
//Результат: 9,88e5
“;” –
разделитель секций. Применяет различное форматирование к числу, в зависимости от того является ли оно положительным числом, отрицательным или нулём. Одна секция – форматирование применяется ко всем числам. Две секции – первая секция для положительных чисел и нулей, вторая для отрицательных. Три секции – первая для положительных, вторая для отрицательных, третья – для нулей.
double posValue = 987;
double negValue = -856;
double zeroValue = 0;
string fmt2 = "##;(##)";
string fmt3 = "##;(##);!Zero!";
Console.WriteLine(posValue.ToString(fmt2));
//Результат: 987
Console.WriteLine(negValue.ToString(fmt2));
//Результат: (856)
Console.WriteLine(posValue.ToString(fmt3));
//Результат: 987
Console.WriteLine(negValue.ToString(fmt3));
//Результат: (856)
Console.WriteLine(zeroValue.ToString(fmt3));
//Результат: !Zero!