Упражнение. Изучение основных принципов форматирования строк
- 20 минут
В этом уроке вы узнаете, как форматировать строки для эффективного отображения, особенно в случаях использования нескольких переменных.
Подготовка среды программирования
Этот модуль включает практические действия, которые помогут вам в процессе создания и выполнения демонстрационного кода. Рекомендуется выполнить эти действия с помощью Visual Studio Code в качестве среды разработки. Использование Visual Studio Code для этих действий поможет вам стать более удобным написанием и выполнением кода в среде разработчика, используемой специалистами по всему миру.
Примечание.
Если вы выполнили другие модули Microsoft Learn в этой серии C#, возможно, вы уже создали папку проекта для примеров кода. Если это так, можно пропустить следующий раздел шагов и удалить код в Project.cs файле, используемом для предыдущего упражнения.
Откройте Visual Studio Code. Для открытия Visual Studio Code можно использовать меню Windows (или эквивалентный ресурс для другой ОС).
В меню "Файл Visual Studio Code" выберите "Открыть папку".
В диалоговом окне "Открыть папку " перейдите в папку "Рабочий стол Windows". Если у вас есть другое расположение папки, в котором хранятся проекты кода, вместо этого можно использовать это расположение папки. Для этого обучения важно иметь расположение, которое легко найти и помнить.
В диалоговом окне "Открыть папку " выберите "Выбрать папку". Если появится диалоговое окно безопасности с запросом доверия авторам, нажмите кнопку "Да".
В меню Terminal Visual Studio Code выберите New Terminal. Обратите внимание, что в командной строке на панели терминала отображается путь к папке текущей папки. Например:
C:\Users\someuser\Desktop>В командной строке терминала создайте консольное приложение в указанной папке, введите dotnet new console -o ./CsharpProjects/TestProjects/TestProject и нажмите клавишу ВВОД. Эта команда .NET CLI использует шаблон программы .NET для создания проекта консольного приложения C# в указанном расположении папки. Команда создает папки CsharpProjects и TestProject для вас и использует TestProject в качестве имени
.csprojфайла.На панели обозревателя разверните папку CsharpProjects . Вы увидите папку TestProject и два файла, файл программы C# с именем Program.cs и файл проекта C# с именем TestProject.csproj.
На панели обозревателя для просмотра файла кода на панели редактора выберите Program.cs.
Удалите существующие строки кода. Этот консольный проект C# используется для создания, сборки и запуска примеров кода во время этого модуля.
Закройте панель терминала.
Что такое составное форматирование?
Составное форматирование использует нумерованные заполнители в строке. Во время выполнения все элементы фигурных скобок разрешаются в значение, которое также передается в зависимости от их положения.
В этом примере составного форматирования используется встроенный метод Format() ключевого string слова типа данных. Обновите код в редакторе Visual Studio Code следующим образом:
string first = "Hello";
string second = "World";
string result = string.Format("{0} {1}!", first, second);
Console.WriteLine(result);
При выполнении этого кода вы увидите следующие выходные данные.
Hello World!
Необходимо учитывать несколько важных моментов в связи с этим кодом.
- Типы данных и переменные определенного типа данных имеют встроенные вспомогательные методы для упрощения некоторых задач.
- Литеральная строка
"{0} {1}!"формирует шаблон, части которого заменяются во время выполнения. - Маркер
{0}заменяется первым аргументом после строкового шаблона, то есть значением переменнойfirst. - Маркер
{1}заменяется вторым аргументом после строкового шаблона, то есть значением переменнойsecond.
Примечание.
Вам может показаться странным начинать с цифры 0. На самом деле это очень распространено в разработке программного обеспечения. При наличии последовательности элементов, которую можно определить с помощью числа, нумерация обычно начинается с 0.
Внесите в код следующие изменения.
string first = "Hello"; string second = "World"; Console.WriteLine("{1} {0}!", first, second); Console.WriteLine("{0} {0} {0}!", first, second);Сохраните файл кода и используйте Visual Studio Code для запуска кода. Должен появиться следующий результат:
World Hello! Hello Hello Hello!
Несколько наблюдений по этим примерам:
- Для первой
Console.WriteLine()инструкции обратите внимание, что маркеры можно упорядочить в любом порядке. Пример кода имеется{1}раньше{0}. - Для второй
Console.WriteLine()инструкции обратите внимание, что маркеры можно повторно использовать с тремя экземплярами{0}. Кроме того, второй аргументsecondпеременной, не используется. Тем не менее, код по-прежнему выполняется без ошибок.
Что такое интерполяция строк?
Интерполяция строк — это метод, упрощающий составное форматирование.
Вместо использования нумерованного маркера и включения литерального значения или имени переменной в список аргументов для String.Format() или Console.WriteLine() можно просто использовать имя переменной внутри фигурных скобок.
Чтобы выполнить интерполяцию строки, необходимо добавить к ней префикс в виде директивы
$. Теперь создайте те же примеры из предыдущих версий, используя интерполяцию строк вместо составного форматирования. Внесите в код следующие изменения.string first = "Hello"; string second = "World"; Console.WriteLine($"{first} {second}!"); Console.WriteLine($"{second} {first}!"); Console.WriteLine($"{first} {first} {first}!");Сохраните файл кода и используйте Visual Studio Code для запуска кода. Должен появиться следующий результат:
Hello World! World Hello! Hello Hello Hello!
Примечание.
Если вы посмотрите на примеры кода в книгах и в Интернете, скорее всего, вы увидите как составное форматирование , так и интерполяцию строк , но обычно следует выбрать интерполяцию строк.
Форматирование валюты
Составное форматирование и интерполяцию строк можно использовать для форматирования значений для отображения с учетом языка и региональных параметров. В следующем примере описатель формата валюты :C используется для представления переменных price и discount в качестве валюты. Внесите в код следующие изменения.
decimal price = 123.45m;
int discount = 50;
Console.WriteLine($"Price: {price:C} (Save {discount:C})");
Если вы выполнили этот код на компьютере с языком отображения Windows, равным "английский (США)", вы увидите следующие выходные данные.
Price: $123.45 (Save $50.00)
Обратите внимание, что при добавлении :C к маркерам внутри фигурных скобок число форматируется как валюта независимо от того, используется ли int или decimal.
Примечание.
Что произойдет, если ваша страна или регион и язык не известны? Если вы запустите предыдущий код в редакторе .NET в браузере, например в TrydotNet, вы увидите следующие выходные данные: Price: ¤123.45 (Save ¤50.00) Символ используется вместо символа ¤ для денег в вашей стране или регионе. Это универсальный символ, используемый для обозначения "валюты" независимо от типа валюты. Этот символ отображается в редакторе .NET, так как он игнорирует текущее расположение.
Как страна или регион пользователя влияют на форматирование строк
Что делать, если вы выполнили предыдущий код на компьютере во Франции с его языком отображения Windows, установленным на французский? В этом случае вы увидите следующие выходные данные.
Price: 123,45 € (Save 50,00 €)
Причина предыдущего вывода "€" заключается в том, что функция форматирования денежных строк основывается на параметре локального компьютера для культуры. В этом контексте термин "язык и региональные параметры" относится к стране или региону и языку конечного пользователя. Код языка и региональных параметров — это пять символьных строк, используемых компьютерами для идентификации расположения и языка конечного пользователя. Код языка и региональных параметров обеспечивает правильное представление определенных сведений, таких как даты и валюта.
Например:
- код языка и региональных параметров пользователя в США, говорящего на английском языке, —
en-US; - код языка и региональных параметров пользователя во Франции, говорящего на французском языке, —
fr-FR; - код языка и региональных параметров пользователя в Канаде, говорящего на французском языке, —
fr-CA.
Язык и региональные параметры влияют на систему письма, используемый календарь, порядок сортировки строк и форматирование дат и чисел (например, форматирование валюты).
К сожалению, убедитесь, что код работает правильно на всех компьютерах независимо от страны или региона или языка конечного пользователя является сложным. Этот процесс называется локализацией (или глобализацией). Локализация зависит от многих факторов, которые не рассматриваются в этом модуле, но просто синтаксис форматирования строк может использовать другой формат в зависимости от языка и региональных параметров пользователя.
Форматирование чисел
При работе с числовыми данными может потребоваться отформатировать число для удобочитаемости, включая запятые для обозначения тысяч, миллионов, миллиардов и т. д.
Описатель N числового формата делает числа более читаемыми. Внесите в код следующие изменения.
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N} units");
Если вы просматриваете это из en-US языка и региональных параметров, вы увидите следующие выходные данные.
Measurement: 123,456.79 units
По умолчанию описатель числового формата N отображает только две цифры после десятичной запятой.
Если вам нужно больше точности, добавьте число после описателя. Следующий код отобразит четыре цифры после десятичной запятой с помощью описателя N4. Внесите в код следующие изменения.
decimal measurement = 123456.78912m;
Console.WriteLine($"Measurement: {measurement:N4} units");
Если вы просматриваете это из en-US языка и региональных параметров, вы увидите следующие выходные данные.
Measurement: 123,456.7891 units
Форматирование процентов
P Используйте описатель формата для форматирования процентных значений и округления до 2 десятичных разрядов. Добавьте число, чтобы управлять количеством значений, отображаемых после десятичной запятой. Внесите в код следующие изменения.
decimal tax = .36785m;
Console.WriteLine($"Tax rate: {tax:P2}");
Если вы просматриваете это из en-US языка и региональных параметров, вы увидите следующие выходные данные.
Tax rate: 36.79%
Объединение подходов к форматированию
Строковые переменные могут хранить строки, созданные с помощью методов форматирования. В следующем примере десятичные и десятичные математические результаты форматируются и хранятся в строке yourDiscount с помощью составного форматирования.
Обновите код следующим образом.
decimal price = 67.55m;
decimal salePrice = 59.99m;
string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);
Console.WriteLine(yourDiscount);
Если вы просматриваете это из en-US языка и региональных параметров, вы увидите следующие выходные данные.
You saved $7.56 off the regular $67.55 price.
Можно объединить несколько форматированных строк. Выполните сборку предыдущего кода, объединяя вычисляемый процент, используя интерполяцию строк вместо объединения строк, вставляя yourDiscount += $"A discount of {(price - salePrice)/price:P2}!"; код в строку до Console.WriteLine()этого.
Примечание.
Вам не нужно использовать String.Format() этот подход интерполяции строк.
Обновите код следующим образом.
decimal price = 67.55m;
decimal salePrice = 59.99m;
string yourDiscount = String.Format("You saved {0:C2} off the regular {1:C2} price. ", (price - salePrice), price);
yourDiscount += $"A discount of {((price - salePrice)/price):P2}!"; //inserted
Console.WriteLine(yourDiscount);
Если вы просматриваете этот урок из en-US языка и региональных параметров, вы увидите следующие выходные данные.
You saved $7.56 off the regular $67.55 price. A discount of 11.19%!
Кратко
Ниже приведены наиболее важные выводы о форматировании строк из этого урока:
- Для форматирования строк можно использовать составное форматирование или интерполяцию строк.
- При составном форматировании используется строковый шаблон, содержащий один или несколько маркеров замены в форме
{0}. Вы также можете указать список аргументов, которые сопоставляются с маркерами замены в зависимости от их порядка. Составное форматирование работает при использованииstring.Format()илиConsole.WriteLine(). - При интерполяции строк используется шаблон строки, содержащий имена переменных, которые необходимо заменить фигурными скобками. Используйте директиву
$перед строковым шаблоном, чтобы указать, что нужно выполнить интерполяцию строки. - Форматирование валюты с помощью описателя
:C. - Форматирование чисел с помощью описателя
:N. Контролируйте точность (число значений после десятичной запятой), указав число после:N, например{myNumber:N3}. - Проценты форматирования с помощью
:Pописателя формата. - Форматирование валют и чисел зависит от языка и региональных параметров конечного пользователя, пяти символьного кода, включающего страну или регион пользователя и язык (на каждый параметр на своем компьютере).