Рубріки: Теория

Форматирование и интерполяция строк: stringformat в C#

Сергей Почекутов

Вывод на экран отформатированной строки для передачи информации — распространенная задача при разработке ПО. В C# StringFormat позволяет форматировать строки проще, быстрее и удобнее, чем при использовании конкатенации. Как этот метод работает, какие предоставляет возможности и какие есть способы форматирования — изучим в этой статье.

Содержание:

1.Как форматировать строки в C#
1.1 Описатели форматов
1.2 Валюта
1.3 Целые числа
1.4 Дробные числа
1.5 Проценты
1.6 Настраиваемые форматы
2. Использование метода ToString
3. Интерполяция строк
4. Итог по применению

Как форматировать строки в C# с помощью String.Format

Мы уже рассказывали про базовые операции, которые позволяют работать со строками в C#. Здесь мы подробнее рассмотрим форматирование строк.

Форматировать строки в C# помогает метод String.Format. Он преобразует значения объектов в строки и затем вставляет их в результирующую строку.

Пример форматирования с помощью String.Format:

string newString;
newString = string.Format("There are {0} cats in my {1} and no {2}", 2, "house", "dogs"); // There are 2 cats in my house and no dogs

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

Описатели форматов

Для представления чисел в C# используются следующие описатели:

Описатель формата Описание
“C” или “c” Валюта
“D” или “d” Целое число
“E” или “e” Экспоненциальный вид
“F” или “f” Фиксированная запятая
“G” или “g” Наиболее компактная запись из двух вариантов: “E” и “F”
“P” или “p” Проценты
“X” или “x” Шестнадцатеричное представление числа
Любой другой символ Исключение FormatException

В таблице представлены лишь некоторые описатели. Подробную информацию по всем описателям и их свойствам смотрите в документации.

Мы же здесь пройдёмся по примерам использования, чтобы вы могли попробовать форматирование на практике.

String.Format также используется для преобразования даты и времени. С его помощью можно отобразить DateTime так, как вам хочется: сначала дату, сначала время, год в двузначном формате, год в четырехзначном формате.

Таблица описателей формата даты и времени с подробными объяснениями и примерами также есть в документации.

Валюта

Для форматирования валюты используется описатель “C” или “c”’. Знак валюты зависит от того, какая локаль установлена. Например, если это en-US, то в строке будет отображаться знак доллара, а если fr-FR, то знак евро.

После описателя можно указать, сколько знаков требуется отобразить после запятой.

Пример:

double number = 35.8;
string str = string.Format("{0:C2}", number); // $35.80
string str2 = string.Format("{0:C1}", number); // $35.8

Целые числа

Для форматирования целых чисел используется описатель ‘D’ или ‘d’.

Пример:

int intNum = 33;
str = string.Format("{0:d}",intNum); // 33
str = string.Format("{0:d4}", intNum); // 0033

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

Дробные числа

Для форматирования дробных чисел используется описатели “E”, “F” или “G”:

Подробнее о разнице между этими тремя описателями можно узнать из документации.

Примеры:

double dNum = 12.4567;
str = string.Format("{0:E}", dNum); // 1,245670E+001
str = string.Format("{0:E2}", dNum); // 1,25E+001
str = string.Format("{0:F3}", dNum); // 12,457
str = string.Format("{0:G}", dNum); // 12,4567

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

Проценты

Для форматирования процентов используется описатель ‘P’ или ‘p’.

Пример:

double percent = 0.45221;
str = string.Format("{0:P}", percent); // 45,22%
str = string.Format("{0:P1}", percent); // 45,2%

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

Настраиваемые форматы

C# предоставляет возможность настраивать формат вывода. Например, в качестве заместителя цифры используется символ #. С его помощью удобно представлять число как номер телефона:

long phone = 12345678910;
str = string.Format("{0:+#(###)###-##-##}", phone); // +1(234)567-89-10

Настраиваемых числовых форматов тоже много. Например, знак “.” — это разделитель. С его помощью определяется разделитель целой и дробной частей в результирующей строке. Знак “%” — заместитель процента. Есть также настраиваемые форматы даты и времени.

Полный список настраиваемых числовых форматов и форматов даты и времени с подробными объяснениями и примерами доступен в документации.

Использование метода ToString

Метод ToString позволяет получить строковое описание объекта для дальнейшего форматирования. Он работает с теми же описателями, которые доступны методу Format.

Например, принимаем число, преобразуем его в строку и форматируем — по маске превращаем число в номер телефона:

long num = 12345678910;
Console.WriteLine(num.ToString("+# (###) ###-##-##")); // +1 (234) 567-89-10

Принимаем число, используем описатель ‘C’, чтобы отобразить валюту, и указываем количество символов после запятой.

double price = 10,50;
Console.WriteLine(price.ToString("C1")); // $10,5

Интерполяция строк

Интерполяция строк — упрощенный механизм форматирования строк. Он появился в версии C# 6.0.

Интерполяция позволяет сделать код более читабельным, а также выполнять логические и математические операции с объектами непосредственно во время форматирования. Чтобы использовать интерполяцию, достаточно указать перед строкой символ доллара — $.

Простой пример:

User user = new User { Name = "Oleg", Surname = "Petrov", Age = 35 };
Console.WriteLine($"Имя {user.Name} Фамилия {user.Surname} Возраст {user.Age}"); // Имя Oleg Фамилия Petrov Возраст 35

А в этом примере мы проверяем объект. Если он равен null, то выводим дефолтное значение:

User user = null;
Console.WriteLine($"Имя {user?.Name ?? "Пусть тогда зовут Олег"}"); // Имя Пусть тогда зовут Олег

А вот пример с использованием настраиваемого формата:

long num = 12345678910;
Console.WriteLine($"{num:+# ### ### ## ##}"); // +1 234 567 89 10

Можно выполнять математические операции прямо во время форматирования:

double x = 15.59;
double y = 19.17;
Console.WriteLine($"{x} + {y} = {x + y}"); // 15,59 + 19,17 = 34,76

И добавлять пространство до или после вывода:

Console.WriteLine($"Имя: {person.Name, -10} Возраст: {person.Age, -10}"); // 10 пробелов после
Console.WriteLine($"Имя: {person.Name, 10} Возраст: {person.Age, 10}"); // 10 пробелов до

Как видите, возможностей для форматирования много, а пользоваться ими очень удобно.

Заключение

C# предлагает разные способы для форматирования строк. Для самых простых случаев, когда достаточно просто соединить несколько строк вместе, достаточно использовать конкатенацию.

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

Вместо метода String.Format можно использовать интерполированные строки. Их плюс — более удобный и понятный синтаксис.

Видео для закрепления материала:

 

 

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023