Строки настраиваемых числовых форматов

Обновлен: Июль 2008

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

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

Описатель формата

Имя

Описание

0

Знак-заместитель нуля

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

Спецификатор "00" приводит к округлению значения до ближайшего значения цифры, предшествующей десятичной точке-разделителю, если назначено использование округления от нуля. Например, в результате форматирования числа 34,5 с помощью строки "00" будет получена строка со значением"35".

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

#

Заместитель цифры

Цифра, расположенная в соответствующей позиции форматируемого значения будет скопирована в выходную строку, если в этой позиции в строке формата присутствует знак "#". В противном случае в выходной строке на этой позиции ничего не записывается.

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

Строка формата "##" приводит к округлению значения до ближайшего значения цифры, предшествующей десятичному разделителю, если назначено использование округления от нуля. Например, в результате форматирования числа 34,5 с помощью строки "##" будет получена строка со значением "35".

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

.

Разделитель

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

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

В следующем примере спецификатор формата десятичний точки используется для определения местоположения десятичной точки в нескольких выходных строках.

,

Разделитель числовых разрядов и масштабирование чисел

Символ "," служит в качестве спецификатора разделителя числовых разрядов и спецификатора масштабирования чисел.

Спецификатор разделителя числовых разрядов: Если один или несколько символов "," указаны между двумя заместителями цифр (0 или #), которые форматируют целые разряды числа, то символ разделителя групп вставляется между каждой группой числа в составной части выходных данных.

Свойства NumberGroupSeparator и NumberGroupSizes текущего объекта NumberFormatInfo определяют знак, используемый в качестве разделителя групп числа и размера каждой группы числа. Например, если строка "#,#" и неизменяемый язык и региональные параметры используются для форматирования числа 1000, то результатом является "1,000".

Спецификатор масштабирования чисел: Если один или несколько символов "," указаны непосредственно слева от явной или неявной десятичной точки, то форматируемое число делится на 1000 каждый раз, когда встречается спецификатор масштабирования числа. Например, если строка "0,," используется для форматирования числа 100 миллионов, то результатом является "100".

Можно использовать разделитель числовых разрядов и спецификатор масштабирования числа в одной строке формата. Например, если строка "#, 0,," и неизменяемый язык и региональные параметры используются для форматирования числа один миллиард, то результатом является "1,000".

Следующий пример иллюстрирует использование запятой в качестве разделителя числовых разрядов.

Следующий пример иллюстрирует использование запятой как спецификатора масштабирования числа.

%

Заместитель процентов

При использовании знака "%" в строке форматирования число будет умножено на 100. В соответствующую позицию выходной строки будет вставлен знак "%". Знак процента определяется текущим классом NumberFormatInfo.

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

Местозаполнитель промилле

При использовании в строке формата знака "‰" (\u2030) перед форматированием число будет умножено на 1000. В соответствующую позицию возвращаемой строки будет вставлен знак промилле. Используемый знак промилле определяется значением свойства NumberFormatInfo.PerMilleSymbol объекта, содержащего сведения о форматировании для заданного языка и региональных параметров.

В следующем примере определяется строка пользовательского формата, включающая местозаполнитель промилле.

E0

E+0

E-0

e0

e+0

e-0

Экспоненциальное представление чисел

Если в строке формата присутствует один из знаков "E", "E+", "E-", "e", "e+" или "e-", за которым следует по крайней мере один знак "0", число представляется в экспоненциальной форме; между числом и экспонентой вставляется знак "E" или "e". Минимальная длина экспоненты в строке вывода определяется количеством нулей, расположенных за знаком формата. Знаки "E+" и "e+" устанавливают обязательное отображение знака "плюс" или "минус" перед экспонентой. Знаки "E", "e", "E-" и "e-" устанавливают отображение знака только для отрицательных чисел.

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

\

Символ начала управляющей последовательности

В C# и C++ символ, следующий в строке формата за обратной косой чертой, воспринимается как escape-последовательность. Этот символ используется с обычными последовательностями форматирования (например, \n — новая строка).

Чтобы использовать обратную косую черту как символ, в некоторых языках ее необходимо повторить. В противном случае символ будет интерпретирован компилятором как начало управляющей последовательности. Чтобы отобразить обратную косую черту, используйте строку с "\\".

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

'ABC'

"ABC"

Символьная строка

Символы, заключенные в одинарные или двойные кавычки, копируются в выходную строку без форматирования.

;

Разделитель секций

Знак ";" служит для разделения секций положительных, отрицательных и нулевых чисел в строке формата. Если в строке пользовательского формата две секции, то крайняя левая секция определяет форматирование положительных чисел и нулей, а крайняя правая – форматирование отрицательных чисел. Если в строке пользовательского формата три секции, то крайняя левая секция определяет форматирование положительных значений, средняя секция определяет форматирование отрицательных значений, а крайняя правая – форматирование нулевых значений.

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

Другие

Все остальные знаки

Любой другой символ копируется в выходную строку и не влияет на форматирование.

Примечания

Бесконечности действительных чисел с плавающей запятой и NaN

Обратите внимание, что независимо от строки формата, если значение типа с плавающей запятойSingle или Double является плюс бесконечностью, минус бесконечностью или не является числом (NaN), в отформатированной строке является значением соответствующим PositiveInfinitySymbol, NegativeInfinitySymbol, или свойству NaNSymbol, которые указаны в данный момент соответствующим объектом NumberFormatInfo.

Настройки панели управления

Параметры элемента панели управления Язык и региональные стандарты влияют на выходную строку, получаемую в результате операции форматирования. Эти параметры используются для инициализации объекта NumberFormatInfo, связанного с текущей культурой потока, а текущая культура потока предоставляет значения, которые используются для управления форматированием. Результирующие строки будут различаться на компьютерах с разными настройками.

Строки формата с фиксированной запятой и округлением

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

Разделители секций и условное форматирование

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

Число секций

Описание

Одна секция

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

Две секции

Первая секция применяется для положительных значений и нулей, вторая секция применяется для отрицательных значений.

Если форматируемое число является отрицательным, но становится нулем в результате округления в соответствии с форматированием, то ноль форматируется в соответствии с первой секцией.

Три секции

Первая секция применяется для положительных значений, вторая секция применяется для отрицательных значений, а третья — для нулей.

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

Если форматируемое число является ненулевым, но становится нулем в результате округления в соответствии с форматированием в первой или второй секции, то ноль форматируется в соответствии с третьей секцией.

При форматировании конечного значения разделители секций игнорируют любое существовавшее ранее форматирование, связанное с числом. Например, при использовании разделителей секций отрицательные значения всегда отображаются без знака "минус". Чтобы конечное отформатированное значение содержало знак "минус", его следует явным образом включить в настраиваемый спецификатор формата.

В следующих фрагментах кода демонстрируется применение разделителей секций для создания строк форматирования.

Dim MyPos As Double = 19.95
Dim MyNeg As Double = -19.95
Dim MyZero As Double = 0

' In the U.S. English culture, MyString has the value: $19.95.
Dim MyString As String = MyPos.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: ($19.95).
' The minus sign is omitted by default.
MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: Zero.
MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero")
double MyPos = 19.95, MyNeg = -19.95, MyZero = 0.0;

// In the U.S. English culture, MyString has the value: $19.95.
string MyString = MyPos.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: ($19.95).
// The minus sign is omitted by default.
MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: Zero.
MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero");

Два примера настраиваемых форматов

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

Dim myDouble As Double = 1234567890
Dim myString As String = myDouble.ToString( "(###) ### - ####" )
' The value of myString is "(123) 456 – 7890".

Dim MyInt As Integer = 42
MyString = MyInt.ToString( "My Number = #" )
' In the U.S. English culture, MyString has the value: 
' "My Number = 42".
Double myDouble = 1234567890;
String myString = myDouble.ToString( "(###) ### - ####" );
// The value of myString is "(123) 456 – 7890".

int  MyInt = 42;
MyString = MyInt.ToString( "My Number = #" );
// In the U.S. English culture, MyString has the value: 
// "My Number = 42".

См. также

Основные понятия

Строки числовых форматов

Строки стандартных числовых форматов

Ссылки

NumberFormatInfo

Другие ресурсы

Типы форматирования

Журнал изменений

Дата

Журнал

Причина

Июль 2008

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

Исправление ошибки содержимого.