На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Урок 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, Уроки по си шарп, си шарп, конвертация





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




Урок 11. Переменные в двойных кавычках и фигурных скобках в PHP
Заливка и извлечение изображений из базы sqlite на C#


© upread.ru 2013-2023
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.