Урок 17. Конвертация чисел в строки (Number в String) C#


Все уроки по C# расположены здесь.

В этой статье мы продолжим изучение преобразований между строковым и числовым типами данных, теперь уже направление такое: из Number в String.

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

Метод ToString

Каждый тип данных и класс в Framework включает метод toString, который возвращает строковое представление значения или объекта, для которого выполняется метод. Некоторые классы создают объекты, которые не так легко представить в виде строк. В этих случаях, как правило, возвращает метод toString класса полное имя, который содержит пространство имен и имя типа. Например

object anObject = new object();
Console.WriteLine(anObject.ToString());            // Выведет "System.Object"
Простое преобразование с использованием ToString

Самым простым методом преобразования чисел в строки является использование метода ToString для типа без параметров. Произведенная строка содержит неформатированное число. Этот метод можно использовать для переменных и литералов.

int quantity = 1500;
float price = 1.50F;
bool sold = true;
 
Console.WriteLine(quantity.ToString());            // Выведет "1500"
Console.WriteLine(price.ToString());               // Выведет "1.5"
Console.WriteLine(sold.ToString());                // Выведет "True"
Форматирование конвертированных значений

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

int quantity = 1500;
float price = 1.50F;
float discount = 0.05F;

Console.WriteLine(quantity.ToString("n0", new CultureInfo("en-US")));       // Выведет "1,500"
Console.WriteLine(price.ToString("c", new CultureInfo("en-US")));              // Выведет "$1.50"
Console.WriteLine(discount.ToString("p1", new CultureInfo("en-US")));     // Выведет "5.0 %"
Три спецификатора, используемые в приведенных выше примерах, предоставляют форматирование с фиксированной точкой (n), валютой (c) и процентом (p). В случае спецификатора фиксированной точки и процента включается число. Это описатель точности и используется для изменения формата.

Доступные спецификаторы формата

Полный список спецификаторов формата и эффект спецификатора точности для каждого выглядит следующим образом

  • C или c. Форматирует число как денежное значение, включая правильное число десятичных знаков и соответствующий символ валюты для локальной настройки пользователя. Указывает фиксированное число знаков после запятой.
  • D или d. Форматирует целые числа только как простые целые числа. Задает минимальное количество цифр. При необходимости добавляются ведущие нули.
  • E. Форматы чисел в экспоненциальной нотации. Результирующая строка содержит заглавную букву 'E'. Указывает фиксированное число десятичных знаков для мантиссы. Если опущено, используется шесть десятичных знаков.
  • e. Форматирует числа, используя экспоненциальную нотацию. Результирующая строка содержит строчную букву 'e'. Указывает фиксированное число десятичных знаков для мантиссы. Если опущено, используется шесть десятичных знаков.
  • F или f. Форматирует числа с использованием записи с фиксированной точкой. Указывает фиксированное число знаков после запятой.
  • G или g. Форматирует числа с использованием экспоненциальной или фиксированной точечной нотации, в зависимости от того, что создает самую короткую строку. Фактические результаты зависят от типа преобразуемых данных и от того, используется ли спецификатор точности.
  • N или n. Форматирует числа с помощью записи с фиксированной точкой с разделителями тысяч. Указывает фиксированное число знаков после запятой.
  • P или p. Форматирует числа, используя процентную нотацию. Например, 0.25 форматируется как 25%. Указывает фиксированное число знаков после запятой.
  • R или r. Форматы чисел с помощью кругового формата. Это специальный формат, который гарантирует, что сгенерированная строка может быть преобразована обратно в исходное число с помощью методов синтаксического анализа.
  • X. Преобразует числа в строковое представление их шестнадцатеричного значения. Используются цифры от 0 до 9 и от A до F. Задает минимальное количество цифр. При необходимости добавляются ведущие нули.
  • x. Преобразует числа в строковое представление их шестнадцатеричного значения. Используются цифры от 0 до 9 и от a до f. Задает минимальное количество цифр. При необходимости добавляются ведущие нули.
Использование графических форматов для пользовательского форматирования

Спецификаторы стандартного формата полезны в большинстве случаев. Однако могут возникнуть ситуации, когда спецификаторы формата не дают желаемых результатов. В этих случаях можно использовать графический формат. Графический Формат - это строка, содержащая специальные символы, влияющие на конечное преобразование. Существует несколько управляющих символов, каждый из которых будет рассмотрен в следующих разделах.

Нуль заполнитель

Нулевая цифра-заполнитель (0) в графическом формате указывает, что в результирующей преобразованной строке требуется цифра. Если в исходном номере есть цифра в позиции-заполнителе, она копируется в конечный результат. Если в этой позиции нет цифры, то вместо нее используется ноль. Это позволяет генерировать ведущие нули. Если целочисленная часть преобразовываемого числа больше, чем число цифр-заполнителей, дополнительные цифры будут включены, чтобы избежать усечения.

int small = 12;
int large = 123456;
float tiny = 1.234F;
 
Console.WriteLine(small.ToString("0000"));         //  Выведет "0012"
Console.WriteLine(large.ToString("0000"));         // Выведет "123456"
Console.WriteLine(tiny.ToString("0000"));          // Выведет "0001"
Заполнитель десятичная точка

Второй специальный символ является заполнителем десятичной точки. Он может быть объединен с нулевым заполнителем, чтобы определить количество цифр, необходимых как до, так и после десятичной точки. Хотя символ-заполнитель десятичной запятой всегда является символом полной остановки или точки (.), фактический символ в результирующей строке зависит от локальных параметров пользователя. В примерах предполагается, что пользователь имеет конфигурацию Великобритании

int small = 12;
double large = 123456.789;
float tiny = 1.234F;
 
Console.WriteLine(small.ToString("00.00"));        // Выведет "12.00"
Console.WriteLine(large.ToString("00.00"));        // Выведет "123456.79"
Console.WriteLine(tiny.ToString("00.00"));         // Выведет "01.23"
Заполнитель цифр

Заполнитель цифр (#) похож на нулевой заполнитель. Он определяет положение цифры в результирующей отформатированной строке и вызывает округление после десятичной точки. Однако заполнитель цифр не приводит к добавлению начальных или конечных нулей в число, где исходное числовое значение не имеет цифры в соответствующей позиции.

int small = 12;
double large = 123456.789;
float tiny = 1.234F;
 
Console.WriteLine(small.ToString("##.##"));        // Выведет "12"
Console.WriteLine(large.ToString("##.##"));        // Выведет "123456.79"
Console.WriteLine(tiny.ToString("##.##"));         // Выведет "1.23"
Заполнитель цифр имеет побочный эффект при преобразовании нулевого значения в строку. Так как заполнитель не вызывает создание начальных или конечных нулей, при преобразовании нулевого значения результирующая строка пуста.

Console.WriteLine(0.ToString("##.##"));        
Местозаполнитель разделителя тысяч

Заполнитель разделителя тысяч представлен в виде запятой (,). Если запятая включена в формат рисунка слева от десятичной точки и между нулевыми или цифровыми заполнителями, в результат вставляются разделители тысяч. Хотя символ-заполнитель тысяч всегда является запятой, фактический символ в результирующей строке зависит от локальных параметров пользователя.

int small = 12;
double large = 123456.789;
float tiny = 1.234F;


Console.WriteLine(small.ToString("#,#.00")); // Выведет "12.00" Console.WriteLine(large.ToString("#,#.##")); // Выведет "123,456.79" Console.WriteLine(tiny.ToString("#,#.##")); // Выведет "1.23"
Символ масштабирования чисел

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

int miles = 123456789;
 
Console.WriteLine(miles.ToString("#,#,"));         // Выведет "123,457"
Console.WriteLine(miles.ToString("#,#,,.###"));    // Выведет "123.457"
Console.WriteLine(miles.ToString("#,#,,"));        // Выведет "123"
Процентный заполнитель

Заполнитель процента ( % ) используется при отображении значений процента. Местозаполнитель указывает позицию в результирующей строке, где должен отображаться символ процента, и умножает значение на сто. Фактический вставленный символ основан на локальных настройках пользователя.

int small = 12;
double large = 123456.789;
float tiny = 0.0015F;
 
Console.WriteLine(small.ToString("#,#.#%"));       // Outputs "1,200%"
Console.WriteLine(large.ToString("#,#.#%"));       // Outputs "12,345,678.9%"
Console.WriteLine(tiny.ToString("#,#.#%"));        // Outputs ".2%"
Пользовательская экспоненциальная нотация

Графические форматы можно использовать для создания собственных научных или экспоненциальных обозначений. Для определения точного форматирования используется несколько символов. Первый символ, который требуется - верхний регистр " E "или нижний регистр"e". Это означает, что должна использоваться экспоненциальная нотация. Затем следует один или несколько нулей, чтобы указать минимальное количество цифр для экспоненты. Форматирование мантиссы управляется символами-заполнителями, которые появляются перед 'E'.

int small = 12;
double large = 123456.789;
float tiny = 0.0015F;
 
Console.WriteLine(small.ToString("0.0E0"));        // Выведет "1.2E1"
Console.WriteLine(large.ToString("0.00e00"));      // Выведет "1.23e05"
Console.WriteLine(tiny.ToString("0.00E00"));       // Выведет "1.50E-03"
Экспоненциальная нотация может быть изменена путем включения символа плюс или минус после буквы. "+"Означает, что знак для значения экспоненты всегда должен быть включен. Минус " - " означает, что знак должен отображаться только для отрицательных значений экспоненты.

int small = 12;
double large = 123456.789;
float tiny = 0.0015F;
 
Console.WriteLine(small.ToString("0.0E-0"));       // Выведет "1.2E1"
Console.WriteLine(large.ToString("0.00e+00"));     // Выведет "1.23e+05"
Console.WriteLine(tiny.ToString("0.00E+00"));      // Выведет "1.50E-03"
Литерал

Часто числовые значения должны быть отформатированы для включения нечисловых символов. Это может быть достигнуто путем вставки символов в формате изображения. Чтобы вставить символы-заполнители, описанные в предыдущих разделах, заключите их в апострофы ( ' ) или кавычки ("). Для удобства чтения в следующем примере используется апостроф.

Console.WriteLine(12345.ToString("00-00-00"));     // Выведет "01-23-45"
Console.WriteLine(12345.ToString("0'E'"));         // Выведет "12345E"
Экранирующий символ

Escape-символы также могут использоваться в строках графического формата. Они используют стандартный символ обратной косой черты для идентификации escape-последовательности. Эта обратная косая черта должна появиться в самой строке формата, поэтому она должна быть вставлена с помощью двойной обратной косой черты, если перед форматом рисунка не стоит символ"@". Чтобы вставить символ обратной косой черты в конечную строку, четыре обратной косой черты должны быть включены в формат рисунка.

Console.WriteLine(123.45.ToString("\\'0.00\\'"));  // Выведет "'123.45'"
Console.WriteLine(12345.ToString("000\\\\000"));   // Выведет "012\345"
Разделитель

Последний специальный символ, который можно вставить в формат изображения, является разделителем сечений. Это позволяет использовать различное форматирование для положительных, отрицательных и нулевых значений. Если один знак точки с запятой (;) включен формат слева от точки с запятой, то он используется для положительных значений и формат справа для отрицательных чисел. Добавление разделителя второго раздела создает третий раздел для нулевых значений. Если второй раздел пуст, то как положительные, так и отрицательные форматы будут использовать форматирование из первого раздела.

Console.WriteLine(1.ToString("0.0;(0.0)"));         // Выведет "1.0"
Console.WriteLine((-1).ToString("0.0;(0.0)"));      // Выведет "(1.0)"
 
Console.WriteLine(1.ToString("0.0;(0.0);#.#"));     // Выведет "1.0"
Console.WriteLine((-1).ToString("0.0;(0.0);#.#"));  // Выведет "(1.0)"
Console.WriteLine(0.ToString("0.0;(0.0);#.#"));     // Выведет пустую строку
 
Console.WriteLine(1.ToString("0.0;;#.#"));          // Выведет "1.0"
Console.WriteLine((-1).ToString("0.0;;#.#"));       // Выведет "-1.0"
Console.WriteLine(0.ToString("0.0;;#.#"));          // Выведет пустую строку
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегистатьи IT, Уроки по си шарп, си шарп, конвертация




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



Исторические приключения: список книг
Первые шаги с WP-Shop, или простой интернет-магазин на вп за полчаса
Урок 24. Работа с Ajax в Laravel и загрузка файлов