TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1171 1.79K
День девятьсот пятьдесят четвёртый. #TipsAndTricks
Малоизвестные Способы Форматирования Строк
Про форматирование строк я уже писал на канале. И, казалось бы, какие тут могут быть сюрпризы? Давайте посмотрим.
Для краткости я буду приводить только формат в интерполированных строках. Всё то же самое будет работать и для string.Format(). Также в примерах я сразу буду использовать значения. Но имейте в виду, что слева от двоеточия может идти имя переменной.

1. Добавление нолей в начало числа:
$"{123:00000}"    // "00123"
$"{45:00000}" // "00045"
$"{123456:00000}" // "123456"
$"{123:d5}" // "00123"

2. Кастомный формат для цены:
$"{1234:$#,###.00}"    // "$1,234.00"
$"{12:$#,###.00}" // "$12.00"
$"{1234.56:$#,###.00}" // "$1,234.56"
Здесь # – цифра или ничего, 0 – цифра или 0, запятая и точка – разделители тысяч и дробной части соответственно.

3. Формат номера телефона:
$"{79012345678:+#(###)###-##-##}"
//"+7(901)234-56-78"
Отформатировать телефон в американском формате с точками можно, экранировав их:
$"{18005551234:+# ###\\.###\\.####}"
//"+1 800.555.1234"

4. Форматирование процентов:
$"{1.23:##.00%}"  // "123%"
$"{1.23:##.00'%}" // "1.23%"
По умолчанию знак % умножает число на 100.

5. Парсинг строки с разделителем тысяч:
Следующая строчка выдаст ошибку из-за запятой в строке:
int x = int.Parse("1,345");
Чтобы правильно спарсить эту строку, используйте перечисление NumberStyles из System.Globalization:
int x = int.Parse("1,345", NumberStyles.AllowThousands);
// Результат: 1345
Перечисление можно использовать как битовые флаги. Можно убирать знак, пробелы, нули в десятичной части, символ валюты и т.п.:
int x = int.Parse("$    +1,345.00   ",
NumberStyles.Number |
NumberStyles.AllowCurrencySymbol);
// Результат: 1345

6. Как избежать боксинга
Как известно, string.Format приводит к боксингу переданных в него аргументов. Любители микрооптимизаций могут использовать вместо этого метод ToString, передав в него формат:
double x = 19.95;
string str1 = string.Format("{0:C}", x);
string str2 = x.ToString("C");

7. «Тетрарный» оператор
Сразу оговорюсь, что это название я выдумал по аналогии с тернарным оператором. string.Format может выводить различные значения, в зависимости от знака переданного аргумента: положительный, отрицательный или ноль. Для этого используется символ точки с запятой:
$"{4.2:positive;negative;zero}" //positive
$"{-2:positive;negative;zero}" //negative
$"{0:positive;negative;zero}" //zero
Одну из частей можно опустить, тогда первая часть будет относиться к положительным числам и 0, а вторая к отрицательным:
$"{0:yes;no}" // "yes"
Также можно использовать формат вывода:
$"{42:#.00;(#.00)}"  // "42.00"
$"{-42:#.00;(#.00)}" // "(42.00)"

Сколько из этих способов вы знали раньше? Пишите в комментариях.

Источники:
-
http://blog.stevex.net/2007/09/string-formatting-faq/
-
http://blog.stevex.net/string-formatting-in-csharp/
More from @netdeveloperdiary
  1. Oct 16, 2026День 2816. #Карьера #AI Станет ли ИИ-Кодинг Концом Программирования для Людей? Автор ориги…
  2. Oct 15, 2026Post #3374
  3. Oct 14, 2026Post #3373
  4. Oct 13, 2026День 2813. #ЗаметкиНаПолях #Async Ещё Раз Про Async/Await в C#. Часть 1 Почему существует…
  5. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
  6. Oct 11, 2026День 2811. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →