![]() |
Урок 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). В случае спецификатора фиксированной точки и процента включается число. Это описатель точности и используется для изменения формата. Доступные спецификаторы формата Полный список спецификаторов формата и эффект спецификатора точности для каждого выглядит следующим образом
Спецификаторы стандартного формата полезны в большинстве случаев. Однако могут возникнуть ситуации, когда спецификаторы формата не дают желаемых результатов. В этих случаях можно использовать графический формат. Графический Формат - это строка, содержащая специальные символы, влияющие на конечное преобразование. Существует несколько управляющих символов, каждый из которых будет рассмотрен в следующих разделах. Нуль заполнитель Нулевая цифра-заполнитель (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;Символ масштабирования чисел Символ масштабирования чисел представлен в виде запятой (,). Чтобы отличить разделитель тысяч, символ масштабирования чисел должен отображаться непосредственно слева от десятичной точки или в конце формата изображения, если нет местозаполнителя десятичной точки. Каждая включенная запятая делит число на тысячу перед применением форматирования. 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда. ![]() |
Мои услуги
|
© upread.ru 2013-2023 При перепечатке активная ссылка на сайт обязательна. |