Строки форматирования чисел

В предыдущем разделе мы разобрали строковые заполнители и изучили два способа их использования. Помимо этих двух вариантов, в C# поддерживаются более сложные правила форматирования.

Базовый синтаксис заполнителей формата

{индекс,выравнивание:формат}
1. index (индекс)

Индекс / интерполированная переменная, обязательный параметр

Традиционные цифровые заполнители: Console.WriteLine(«{0}», 123); здесь в позицию {0} подставляется число 123

Интерполяция строк $"": достаточно указать имя переменной без цифрового индекса, пример Console.WriteLine($»Tom is {age} years old»)

Пример кода

int money = 1000;
Console.WriteLine("Исходное значение: {0}", money);
Console.WriteLine("Валютный формат: {0:C}", money);
Console.WriteLine("Выравнивание вправо на 10 символов (валюта): |{0,10:C}|", money);Code language: JavaScript (javascript)
Исходное значение: 1000
Валютный формат: $1,000.00
Выравнивание вправо на 10 символов (валюта): | $1,000.00|

Тот же код через интерполяцию

int money = 500;
Console.WriteLine($"Исходное значение: {money}");
Console.WriteLine($"Валютный формат: {money:C}");
Console.WriteLine($"Выравнивание вправо на 10 символов (валюта): |{money,10:C}|");Code language: JavaScript (javascript)
2. alignment (выравнивание)

Спецификатор выравнивания, необязательный, отделяется запятой ,

Назначение: регулирует минимальную ширину вывода и горизонтальное выравнивание текста

Пример: Console.WriteLine(«{0,10}», 123); // занимает 10 символов, число выравнивается вправо

Как видно, слева от числа 123 много пробелов. Цифра 10 задаёт общую ширину в десять символов: перед 123 добавляется 7 пробелов для выравнивания вправо.

Положительное число: выравнивание вправо, недостающее место заполняется пробелами слева Пример: {0,10} → ширина 10 символов, число справа

Отрицательное число: выравнивание влево, недостающее место заполняется пробелами справа Пример: {0,-10} → ширина 10 символов, число слева

Изменим код следующим образом

Console.WriteLine("{0,-10}", 123);  // ширина 10 символов, отрицательное значение — выравнивание влевоCode language: JavaScript (javascript)

Пробелы сложно различить визуально, поэтому добавим вертикальные черты для наглядности

Console.WriteLine("|{0,-10}|", 123);
Console.WriteLine("|{0,10}|", 456);Code language: JavaScript (javascript)

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

Эквивалентная запись через интерполяцию выглядит так

int one = 123;
int two = 456;
Console.WriteLine($"|{one,-10}|");
Console.WriteLine($"|{two,-10}|");Code language: JavaScript (javascript)
3. format (спецификатор формата)

Поле формата, необязательный параметр, отделяется двоеточием :

Управляет отображением чисел: валюта, фиксированная точка, научная нотация, шестнадцатеричный формат и другое

Структура поля формата :Axx

  • : должен стоять сразу после заполнителя без пробелов
  • A: однобуквенный спецификатор (9 стандартных встроенных форматов, некоторые чувствительны к регистру)
  • xx: спецификатор точности (опционально, 1–2 цифры; смысл зависит от буквы формата)
// F4: формат с фиксированной точкой, 4 знака после запятой
Console.WriteLine("{0:F4}", 12.345678);

// Аналог через интерполяцию
Console.WriteLine($"{12.345678:F4}");Code language: JavaScript (javascript)

Дополнительные примеры

double myDouble = 12.345678;
Console.WriteLine("{0,-10:G} -- Общий формат", myDouble);      // 12.345678 -- Общий формат
Console.WriteLine("{0,-10} -- По умолчанию", myDouble);         // 12.345678 -- По умолчанию
Console.WriteLine("{0,-10:F4} -- Фиксированная точка", myDouble);   // 12.3457  -- Фиксированная точка
Console.WriteLine("{0,-10:C} -- Валюта", myDouble);     // $12.35    -- Валюта
Console.WriteLine("{0,-10:E3} -- Научная нотация", myDouble);//1.235E+001 -- Научная нотация
Console.WriteLine("{0,-10:x} -- Шестнадцатеричное целое", 1194719);   // 123adf    -- Шестнадцатеричное целоеCode language: JavaScript (javascript)

Таблица 9 стандартных спецификаторов числового формата

ИдентификаторНазваниеДействиеЗначение точностиПример вывода
C/cCurrency ВалютаОтображение локального знака валютыКоличество знаков после запятой{0:C} 12.5 → $12.50
D/dDecimal Десятичное целоеТолько для int, дополнение нулями слеваМинимальное количество цифр{0:D4} 12 → 0012
F/fFixed-point Фиксированная точкаФиксированное число знаков после запятойСохраняемые знаки после запятой{0:F4} 12.345678 →12.3457
G/gGeneral Общий форматАвтовыбор фиксированной точки или научной нотации, формат по умолчаниюКоличество значащих цифр{0:G4} 12.345678 →12.35
X/xHexadecimal Шестнадцатеричный (чувствителен к регистру)Вывод шестнадцатеричных цифр, X — верхний регистр, x — нижнийМинимальное количество цифр{0:x} 180026 → 2bf3a
N/nNumber Число с разделителямиРазделение разрядов по три цифрыКоличество знаков после запятой{0:N2} 12345678.54321 →12,345,678.54
P/pPercent ПроцентУмножение значения на 100 с добавлением знака %Количество знаков после запятой{0:P2} 0.1221897 →12.22 %
R/rRound-trip Возвратный форматФорматирование без потери точности для обратного преобразованияПараметр точности игнорируется{0:R} 1234.21897 →1234.21897
E/eScientific Научная нотация (чувствительна к регистру)Экспоненциальная запись, E — верхний регистр, e — нижнийКоличество знаков после запятой мантиссы{0:e4}12.3456789 →1.2346e+001

Строки форматирования чисел

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *