Как decimal перевести в string c
Перейти к содержимому

Как decimal перевести в string c

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

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

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

Метод ToString

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

Простое преобразование с использованием ToString

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

Форматирование конвертированных значений

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

Три спецификатора, используемые в приведенных выше примерах, предоставляют форматирование с фиксированной точкой (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) в графическом формате указывает, что в результирующей преобразованной строке требуется цифра. Если в исходном номере есть цифра в позиции-заполнителе, она копируется в конечный результат. Если в этой позиции нет цифры, то вместо нее используется ноль. Это позволяет генерировать ведущие нули. Если целочисленная часть преобразовываемого числа больше, чем число цифр-заполнителей, дополнительные цифры будут включены, чтобы избежать усечения.

Заполнитель десятичная точка

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

Заполнитель цифр

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

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

Местозаполнитель разделителя тысяч

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

Символ масштабирования чисел

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

Процентный заполнитель

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

Пользовательская экспоненциальная нотация

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

Экспоненциальная нотация может быть изменена путем включения символа плюс или минус после буквы. «+»Означает, что знак для значения экспоненты всегда должен быть включен. Минус » — » означает, что знак должен отображаться только для отрицательных значений экспоненты.

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

Экранирующий символ

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

Разделитель

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


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

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

Decimal. To String Метод

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

Преобразует значение данного экземпляра в эквивалентное ему представление типа String.

Перегрузки

Преобразует числовое значение данного экземпляра в эквивалентное ему строковое представление.

Преобразует числовое значение данного экземпляра в эквивалентное ему строковое представление с использованием указанных сведений об особенностях форматирования для данного языка и региональных параметров.

Преобразует числовое значение данного экземпляра в эквивалентное строковое представление с использованием указанного формата.

Преобразует числовое значение данного экземпляра в эквивалентное ему строковое представление с использованием указанного формата и сведений об особенностях форматирования для данного языка и региональных параметров.

ToString()

Преобразует числовое значение данного экземпляра в эквивалентное ему строковое представление.

Возвращаемое значение

Строковое представление значения данного экземпляра.

Примеры

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

В следующем примере отображается сумма денег на счете.

Комментарии

Метод ToString() форматирует Decimal значение в формате по умолчанию (G или общего) текущего языка и региональных параметров. Если вы хотите указать другой формат или язык и региональные параметры, используйте другие перегрузки ToString метода, как показано ниже.

Использование формата Для языка и региональных параметров Использование перегрузки
Формат по умолчанию ("G") Определенный язык и региональные параметры ToString(IFormatProvider)
Определенный формат Язык и региональные параметры по умолчанию (текущая версия) ToString(String)
Определенный формат Определенный язык и региональные параметры ToString(String, IFormatProvider)

.NET обеспечивает расширенную поддержку форматирования, которая подробно описана в следующих разделах форматирования:

Дополнительные сведения об описателях числовых форматов см. в разделе "Стандартные числовые строки" и "Строки настраиваемого числового формата".

Дополнительные сведения о форматировании см. в разделе "Типы форматирования".

См. также раздел

Применяется к

ToString(IFormatProvider)

Преобразует числовое значение данного экземпляра в эквивалентное ему строковое представление с использованием указанных сведений об особенностях форматирования для данного языка и региональных параметров.

Параметры

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

Возвращаемое значение

Строковое представление значения данного экземпляра, определяемое параметром provider .

Реализации

Примеры

В следующем примере показано строковое представление Decimal значения с помощью CultureInfo объектов, представляющих несколько различных языков и региональных параметров.

Комментарии

Метод ToString(IFormatProvider) форматирует Decimal значение в формате по умолчанию ("G" или общего) указанного языка и региональных параметров. Если вы хотите указать другой формат или текущий язык и региональные параметры, используйте другие перегрузки ToString метода, как показано ниже.

Использование формата Для языка и региональных параметров Использование перегрузки
Формат по умолчанию ("G") Язык и региональные параметры по умолчанию (текущая версия) ToString()
Определенный формат Язык и региональные параметры по умолчанию (текущая версия) ToString(String)
Определенный формат Определенный язык и региональные параметры ToString(String, IFormatProvider)

.NET обеспечивает расширенную поддержку форматирования, которая подробно описана в следующих разделах форматирования:

Дополнительные сведения об описателях числовых форматов см. в разделе "Стандартные числовые строки" и "Строки настраиваемого числового формата".

Дополнительные сведения о форматировании см. в разделе "Типы форматирования".

Параметр provider является реализацией IFormatProvider , метод которой IFormatProvider.GetFormat возвращает NumberFormatInfo объект. Как правило, provider это NumberFormatInfo объект или CultureInfo объект. Параметр provider предоставляет сведения, относящиеся к языку и региональным параметрам, используемые в форматировании. Если значение параметра provider равно null , используются текущий язык и региональные параметры потока.

Чтобы преобразовать Decimal значение в строковое представление с помощью заданного языка и региональных параметров и определенной строки формата, вызовите Decimal.ToString(String, IFormatProvider) метод.

См. также раздел

Применяется к

ToString(String)

Преобразует числовое значение данного экземпляра в эквивалентное строковое представление с использованием указанного формата.

Параметры

Стандартная или пользовательская строка числового формата.

Возвращаемое значение

Строковое представление значения данного экземпляра, определяемое параметром format .

Исключения

Примеры

В следующем примере показано Decimal значение, использующее каждый из поддерживаемых описателей стандартного числового формата, а также две строки настраиваемого числового формата. При преобразовании числовых значений в строки в примере используются соглашения о форматировании языка и региональных параметров en-US.

Комментарии

Метод ToString(String) форматирует Decimal значение в указанном формате с помощью соглашений текущего языка и региональных параметров. Если вы хотите использовать формат по умолчанию (G или общий) или указать другой язык и региональные параметры, используйте другие перегрузки ToString метода следующим образом:

Использование формата Для языка и региональных параметров Использование перегрузки
Формат по умолчанию ("G") Язык и региональные параметры по умолчанию (текущая версия) ToString()
Формат по умолчанию ("G") Определенный язык и региональные параметры ToString(IFormatProvider)
Определенный формат Определенный язык и региональные параметры ToString(String, IFormatProvider)

Метод ToString использует строку стандартного или настраиваемого числового формата, указанную параметром format , для преобразования значения текущего экземпляра в строковое представление. Параметр format может быть любым допустимым описатель стандартного числового формата , кроме D, R и X, а также любого сочетания настраиваемых описателей числовых форматов. Если format это null или пустая строка, возвращаемое значение этого экземпляра отформатировано с помощью общего числового описателя формата (G).

.NET обеспечивает расширенную поддержку форматирования, которая подробно описана в следующих разделах форматирования:

Дополнительные сведения об описателях числовых форматов см. в разделе "Стандартные числовые строки" и "Строки настраиваемого числового формата".

Дополнительные сведения о форматировании см. в разделе "Типы форматирования".

Возвращаемое значение отформатировано с помощью NumberFormatInfo объекта для текущего языка и региональных параметров. Чтобы применить соглашения о форматировании для указанного языка и региональных параметров, вызовите ToString(String, IFormatProvider) метод.

Convert decimal to string

I wrote a C# program that converts decimal to string . It is not the best but it works. I’m looking for inputs from others on how can it be improved? One aspect that baffled me was how to find out total number of digits after decimal point? Right now I’ve to pass it as a separate parameter. It is in C#, but I’m open to any programming language. credit goes to all authors that I found online and little bit to me

user avatar

4 Answers 4

You don’t really need to know the length of the fractional part. Simply separate the fractional from the integral and handle each one separately.

EDIT added check for negative

If you want to take the integral and fractional parts of a decimal , use Decimal.Truncate(Decimal) instead of a cast to int : Decimal can represent much much larger numbers than int , and you code will presently fail for such large numbers.

Simply dividing by 10 won’t work anymore, because of course decimal will keep the fraction part; rather, you can subtract the last ‘digit’ before dividing (see code below).

Note that everyone has changed the name of i from your code: i screams ‘counter’; integralPart and such are much better names. d having a sensible name is even more important, because it is part of the API exposed by the method. Good naming is really important.

Your method will always leave a «.» after the integral part, even if there is no fractional part, except for the special case of 0 . This seems inconsistent, and may or may not be a concern. (it’s not what Decimal.ToString() does, for instance).

You’ve not asked about performance, but I’ll just point out that inserting at the start of a string-builder is more expensive than adding to the end (linear vs. amortised constant). This means you code is actually quadratic in the string-length of the value. You could make it linear by writing the integral part backwards, and then reversing it, but who cares.

Code based on tinstaalf’s code, but using decimal integral and fractional parts (should hopefully work for any decimal value):

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *