Поделиться через


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

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

Строки стандартного числового формата поддерживаются некоторыми перегрузками метода ToString всех числовых типов. Например, можно задать строку числового формата для методов ToString(String) и ToString(String, IFormatProvider) типа Int32. Строки стандартного числового формата также поддерживаются функцией составного форматирования .NET Framework, используемой некоторыми методами Write и WriteLine классов Console и StreamWriter, методом String.Format, а также методом StringBuilder.AppendFormat.

СоветСовет

Можно загрузить программу Format Utility — приложение, позволяющее применять строки формата к числовым значениям и значениям даты и времени и отображающее результирующую строку.

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

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

Имя

Описание

Примеры

"C" или "c"

Валюта

Результат: значение валюты.

Поддерживается: всеми числовыми типами данных.

Описатель точности: количество цифр дробной части.

Описатель точности по умолчанию: определяется System.Globalization.NumberFormatInfo.

Дополнительные сведения: Описатель формата валюты ("C").

123.456 ("C", en-US) -> $123.46

123.456 ("C", fr-FR) -> 123,46 €

123.456 ("C", ja-JP) -> ¥123

-123.456 ("C3", en-US) -> ($123.456)

-123.456 ("C3", fr-FR) -> -123,456 €

-123.456 ("C3", ja-JP) -> -¥123.456

"D" или "d"

Десятичное число

Результат: целочисленные цифры с необязательным отрицательным знаком.

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

Описатель точности: минимальное число цифр.

Описатель точности по умолчанию: минимальное необходимое число цифр.

Дополнительные сведения: Описатель десятичного формата ("D").

1234 ("D") -> 1234

-1234 ("D6") -> -001234

"E" или "e"

Экспоненциальный (научный)

Результат: экспоненциальная нотация.

Поддерживается: всеми числовыми типами данных.

Описатель точности: количество цифр дробной части.

Описатель точности по умолчанию: 6.

Дополнительные сведения: Описатель экспоненциального формата ("E").

1052.0329112756 ("E", en-US) -> 1.052033E+003

1052.0329112756 ("e", fr-FR) -> 1,052033e+003

-1052.0329112756 ("e2", en-US) -> -1.05e+003

-1052.0329112756 ("E2", fr_FR) -> -1,05E+003

"F" или "f"

Фиксированная запятая

Результат: цифры целой и дробной частей с необязательным отрицательным знаком.

Поддерживается: всеми числовыми типами данных.

Описатель точности: количество цифр дробной части.

Описатель точности по умолчанию: определяется System.Globalization.NumberFormatInfo.

Дополнительные сведения: Описатель формата с фиксированной запятой ("F").

1234.567 ("F", en-US) -> 1234.57

1234.567 ("F", de-DE) -> 1234,57

1234 ("F1", en-US) -> 1234.0

1234 ("F1", de-DE) -> 1234,0

-1234.56 ("F4", en-US) -> -1234.5600

-1234.56 ("F4", de-DE) -> -1234,5600

"G" или "g"

Общие

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

Поддерживается: всеми числовыми типами данных.

Описатель точности: количество значащих цифр.

Описатель точности по умолчанию: определяется численным типом.

Дополнительные сведения: Описатель общего формата ("G").

-123.456 ("G", en-US) -> -123.456

123.456 ("G", sv-SE) -> -123,456

123.4546 ("G4", en-US) -> 123.5

123.4546 ("G4", sv-SE) -> 123,5

-1.234567890e-25 ("G", en-US) -> -1.23456789E-25

-1.234567890e-25 ("G", sv-SE) -> -1,23456789E-25

"N" или "n"

Номер

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

Поддерживается: всеми числовыми типами данных.

Описатель точности: желаемое число знаков дробной части.

Описатель точности по умолчанию: определяется System.Globalization.NumberFormatInfo.

Дополнительные сведения: Описатель числового формата ("N").

1234.567 ("N", en-US) -> 1,234.57

1234.567 ("N", ru-RU) -> 1 234,57

1234 ("N", en-US) -> 1,234.0

1234 ("N", ru-RU) -> 1 234,0

-1234.56 ("N", en-US) -> -1,234.560

-1234.56 ("N", ru-RU) -> -1 234,560

"P" или "p"

Процент

Результат: число, умноженное на 100 и отображаемое с символом процента.

Поддерживается: всеми числовыми типами данных.

Описатель точности: желаемое число знаков дробной части.

Описатель точности по умолчанию: определяется System.Globalization.NumberFormatInfo.

Дополнительные сведения: Описатель формата процента ("P").

1 ("P", en-US) -> 100.00 %

1 ("P", fr-FR) -> 100,00 %

-0.39678 ("P1", en-US) -> -39.7 %

-0.39678 ("P1", fr-FR) -> -39,7 %

"R" или "r"

Приемо-передача

Результат: строка, дающая при обратном преобразовании идентичное число.

Поддерживается: Single, Double и BigInteger.

Описатель точности: игнорируется.

Дополнительные сведения: Описатель формата обратного преобразования ("R").

123456789.12345678 ("R") -> 123456789.12345678

-1234567890.12345678 ("R") -> -1234567890.1234567

"X" или "x"

Шестнадцатеричный

Результат: шестнадцатеричная строка.

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

Описатель точности: число цифр в результирующей строке.

Дополнительные сведения: Описатель шестнадцатеричного формата ("X").

255 ("X") -> FF

-1 ("x") -> ff

255 ("x4") -> 00ff

-1 ("X4") -> 00FF

Любой другой символ

Неизвестный описатель

Результат: порождение исключения FormatException во время выполнения.

Использование строк стандартных числовых форматов

Строку стандартного числового формата можно использовать для определения форматирования числового значения одним из двух следующих способов:

  • Ее можно передать перегруженному методу ToString, у которого есть параметр format. В следующем примере осуществляется форматирование числового значения в качестве строки со значением валюты с использованием текущего языка и региональных параметров (в примере это "en-US").

    Dim value As Decimal = 123.456d
    Console.WriteLine(value.ToString("C2"))         
    ' Displays $123.46
    
    decimal value = 123.456m;
    Console.WriteLine(value.ToString("C2"));
    // Displays $123.46
    
  • Ее можно передать в качестве параметра formatString в элементе форматирования, используемом, например, методами String.Format, Console.WriteLine и StringBuilder.AppendFormat. Дополнительные сведения см. в разделе Составное форматирование. В следующем примере элемент форматирования используется для вставки значения валюты в строку.

    Dim value As Decimal = 123.456d
    Console.WriteLine("Your account balance is {0:C2}.", value)
    ' Displays "Your account balance is $123.46."
    
    decimal value = 123.456m;
    Console.WriteLine("Your account balance is {0:C2}.", value);
    // Displays "Your account balance is $123.46."
    

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

Описатель формата валюты ("C")

При использовании описателя формата валюты ("C") число преобразуется в строку, представляющую сумму в некоторой валюте. Желаемое количество знаков дробной части в результирующей строке задается описателем точности. Если описатель точности не задан, точность по умолчанию определяется свойством NumberFormatInfo.CurrencyDecimalDigits.

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

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

Свойство NumberFormatInfo

Описание

CurrencyPositivePattern

Определяет положение символа валюты в положительных значениях.

CurrencyNegativePattern

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

NegativeSign

Задает отрицательный знак, используемый в случае, если свойство CurrencyNegativePattern указывает на то, что скобки для отрицания не используются.

CurrencySymbol

Определяет символ валюты.

CurrencyDecimalDigits

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

CurrencyDecimalSeparator

Определяет строку, разделяющую целую и дробную части числа.

CurrencyGroupSeparator

Определяет строку, разделяющую группы цифр целой части.

CurrencyGroupSizes

Определяет число целочисленных цифр, входящих в группу.

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

Dim value As Double = 12345.6789
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture))

Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture))

Console.WriteLine(value.ToString("C3", _
                  CultureInfo.CreateSpecificCulture("da-DK")))
' The example displays the following output on a system whose
' current culture is English (United States):
'       $12,345.68
'       $12,345.679
'       kr 12.345,679
double value = 12345.6789;
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture));

Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture));

Console.WriteLine(value.ToString("C3", 
                  CultureInfo.CreateSpecificCulture("da-DK")));
// The example displays the following output on a system whose
// current culture is English (United States):
//       $12,345.68
//       $12,345.679
//       kr 12.345,679

К таблице

Описатель десятичного формата ("D")

При использовании описателя десятичного формата ("D") число преобразуется в строку, состоящую из десятичных цифр (0–9); если число отрицательное, перед ним ставится отрицательный знак. Этот формат доступен только для целых типов.

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

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

Свойство NumberFormatInfo

Описание

NegativeSign

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

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

Dim value As Integer 

value = 12345
Console.WriteLine(value.ToString("D"))
' Displays 12345   
Console.WriteLine(value.ToString("D8"))
' Displays 00012345

value = -12345
Console.WriteLine(value.ToString("D"))
' Displays -12345
Console.WriteLine(value.ToString("D8"))
' Displays -00012345
int value; 

value = 12345;
Console.WriteLine(value.ToString("D"));
// Displays 12345
Console.WriteLine(value.ToString("D8"));
// Displays 00012345

value = -12345;
Console.WriteLine(value.ToString("D"));
// Displays -12345
Console.WriteLine(value.ToString("D8"));
// Displays -00012345

К таблице

Описатель экспоненциального формата ("E")

При использовании описателя экспоненциального формата ("E") число преобразуется в строку вида "-d.ddd…E+ddd" или "-d.ddd…e+ddd", где каждый символ "d" обозначает цифру (0–9). Если число отрицательное, в начале строки ставится отрицательный знак. Перед разделителем целой и дробной части всегда стоит ровно одна цифра.

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

Регистр описателя формата задает регистр буквы, стоящей перед экспонентой ("E" или "e"). Экспонента состоит из знака "плюс" или "минус" и трех цифр. Недостающие до минимума цифры заменяются нулями, если это необходимо.

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

Свойство NumberFormatInfo

Описание

NegativeSign

Определяет строку, указывающую на то, что число является отрицательным (как мантисса, так и экспонента).

NumberDecimalSeparator

Определяет строку, разделяющую целую и дробную части мантиссы.

PositiveSign

Определяет строку, указывающую, что экспонента является положительной.

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

Dim value As Double = 12345.6789
Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture))
' Displays 1.234568E+004

Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture))
' Displays 1.2345678900E+004

Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture))
' Displays 1.2346e+004

Console.WriteLine(value.ToString("E", _
                  CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 1,234568E+004
double value = 12345.6789;
Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture));
// Displays 1.234568E+004

Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture));
// Displays 1.2345678900E+004

Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture));
// Displays 1.2346e+004

Console.WriteLine(value.ToString("E", 
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 1,234568E+004

К таблице

Описатель формата с фиксированной запятой ("F")

При использовании описателя формата с фиксированной запятой ("F") число преобразуется в строку вида "-ddd.ddd…", где каждый символ "d" обозначает цифру (0–9). Если число отрицательное, в начале строки ставится отрицательный знак.

Требуемое число знаков дробной части задается спецификатором точности. Если описатель точности отсутствует, то используется численная точность, определяемая текущим значением свойства NumberFormatInfo.NumberDecimalDigits.

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

Свойство NumberFormatInfo

Описание

NegativeSign

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

NumberDecimalSeparator

Определяет строку, разделяющую целую и дробную части числа.

NumberDecimalDigits

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

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

Dim integerNumber As Integer
integerNumber = 17843
Console.WriteLine(integerNumber.ToString("F", CultureInfo.InvariantCulture))
' Displays 17843.00

integerNumber = -29541
Console.WriteLine(integerNumber.ToString("F3", CultureInfo.InvariantCulture))
' Displays -29541.000

Dim doubleNumber As Double
doubleNumber = 18934.1879
Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture))
' Displays 18934.19

Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture))
' Displays 18934

doubleNumber = -1898300.1987
Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture))  
' Displays -1898300.2

Console.WriteLine(doubleNumber.ToString("F3", _ 
                  CultureInfo.CreateSpecificCulture("es-ES")))
' Displays -1898300,199                        
int integerNumber;
integerNumber = 17843;
Console.WriteLine(integerNumber.ToString("F", 
                  CultureInfo.InvariantCulture));
// Displays 17843.00

integerNumber = -29541;
Console.WriteLine(integerNumber.ToString("F3", 
                  CultureInfo.InvariantCulture));
// Displays -29541.000

double doubleNumber;
doubleNumber = 18934.1879;
Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture));
// Displays 18934.19

Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture));
// Displays 18934

doubleNumber = -1898300.1987;
Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture));  
// Displays -1898300.2

Console.WriteLine(doubleNumber.ToString("F3", 
                  CultureInfo.CreateSpecificCulture("es-ES")));
// Displays -1898300,199                        

К таблице

Описатель общего формата ("G")

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

Числовой тип

Точность по умолчанию

Byte или SByte

3 знака

Int16 или UInt16

5 знаков

Int32 или UInt32

10 знаков

Int64

19 знаков

UInt64

20 знаков

BigInteger

29 знаков

Single

7 знаков

Double

15 знаков

Decimal

29 знаков

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

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

Если используется экспоненциальная нотация, регистр буквы, стоящей перед экспонентой, определяется регистром описателя формата (буква "E" соответствует "G", "e" соответствует "g"). Экспонента содержит не менее двух цифр. Это отличает данный формат от экспоненциальной записи, создаваемой при использовании описателя экспоненциального формата, поскольку в последнем случае экспонента содержит не менее трех цифр.

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

Свойство NumberFormatInfo

Описание

NegativeSign

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

NumberDecimalSeparator

Определяет строку, разделяющую целую и дробную части числа.

NumberDecimalDigits

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

PositiveSign

Определяет строку, указывающую, что экспонента является положительной.

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

Dim number As Double

number = 12345.6789      
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays  12345.6789
Console.WriteLine(number.ToString("G", _
                  CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 12345,6789

Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture))
' Displays 12345.68 

number = .0000023
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays 2.3E-06       
Console.WriteLine(number.ToString("G", _
                  CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 2,3E-06

number = .0023
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays 0.0023

number = 1234
Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture))
' Displays 1.2E+03

number = Math.Pi
Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture))
' Displays 3.1416    
double number;

number = 12345.6789;      
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays  12345.6789
Console.WriteLine(number.ToString("G", 
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 12345,6789

Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture));
// Displays 12345.68 

number = .0000023;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays 2.3E-06       
Console.WriteLine(number.ToString("G", 
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 2,3E-06

number = .0023;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays 0.0023

number = 1234;
Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture));
// Displays 1.2E+03

number = Math.PI;
Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture));
// Displays 3.1416    

К таблице

Описатель числового формата ("N")

Спецификатор числового формата ("N") преобразует число в стоку вида "-d,ddd,ddd.ddd… ", где знак "-" при необходимости представляет знак отрицательного числа, знак "d" означает цифру (0-9), знак "," — разделитель групп, а знак "." —- разделитель целой и дробной части. Требуемое число знаков дробной части задается спецификатором точности. Если описатель точности не задан, число десятичных знаков определяется текущим свойством NumberFormatInfo.NumberDecimalDigits.

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

Свойство NumberFormatInfo

Описание

NegativeSign

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

NumberNegativePattern

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

NumberGroupSizes

Определяет число цифр целой части, стоящих между разделителями групп.

NumberGroupSeparator

Определяет строку, разделяющую группы цифр целой части.

NumberDecimalSeparator

Определяет строку, разделяющую целую и дробную части числа.

NumberDecimalDigits

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

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

Dim dblValue As Double = -12445.6789
Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture))
' Displays -12,445.68
Console.WriteLine(dblValue.ToString("N1", _
                  CultureInfo.CreateSpecificCulture("sv-SE")))
' Displays -12 445,7

Dim intValue As Integer = 123456789
Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture))
' Displays 123,456,789.0 
double dblValue = -12445.6789;
Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture));
// Displays -12,445.68
Console.WriteLine(dblValue.ToString("N1", 
                  CultureInfo.CreateSpecificCulture("sv-SE")));
// Displays -12 445,7

int intValue = 123456789;
Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture));
// Displays 123,456,789.0 

К таблице

Описатель формата процента ("P")

При использовании описателя формата процента ("P") число умножается на 100 и преобразуется в строку, представляющую процентную долю. Требуемое число знаков дробной части задается спецификатором точности. Если описатель точности отсутствует, то используется значение точности числа по умолчанию, заданное свойством PercentDecimalDigits.

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

Свойство NumberFormatInfo

Описание

PercentPositivePattern

Определяет положение символа процента в положительных значениях.

PercentNegativePattern

Определяет положение символа процента и отрицательного знака в отрицательных значениях.

NegativeSign

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

PercentSymbol

Определяет символ процента.

PercentDecimalDigits

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

PercentDecimalSeparator

Определяет строку, разделяющую целую и дробную части числа.

PercentGroupSeparator

Определяет строку, разделяющую группы цифр целой части.

PercentGroupSizes

Определяет число целочисленных цифр, входящих в группу.

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

Dim number As Double = .2468013
Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture))
' Displays 24.68 %
Console.WriteLine(number.ToString("P", _
                  CultureInfo.CreateSpecificCulture("hr-HR")))
' Displays 24,68%     
Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture))
' Displays 24.7 %
double number = .2468013;
Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture));
// Displays 24.68 %
Console.WriteLine(number.ToString("P", 
                  CultureInfo.CreateSpecificCulture("hr-HR")));
// Displays 24,68%     
Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture));
// Displays 24.7 %

К таблице

Описатель формата обратного преобразования ("R")

Описатель формата обратного преобразования ("R") гарантирует, что строка, полученная преобразованием из числового значения, при обратном преобразовании даст то же самое числовое значение. Этот формат поддерживается только для типов Single, Double и BigInteger.

Если с помощью этого описателя форматируется значение типа BigInteger, то его строковое представление будет содержать все значащие цифры BigInteger. Если с помощью этого описателя форматируется значение типа Single или Double, то сначала для него проверяется общий формат, при этом для Double используется 15-знаковая точность, а для Single — 7-знаковая точность. Если строка может быть разобрана так, чтобы переменная приняла то же значение, форматирование производится с помощью общего указателя формата. Если при обратном преобразовании значение все же меняется, то количество значащих цифр увеличивается до 17 для типа Double и 9 — для типа Single.

Хотя описатель точности можно указать, он будет проигнорирован. Приведенные указатели приема-передачи в данном случае имеют преимущество перед указателем точности.

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

Свойство NumberFormatInfo

Описание

NegativeSign

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

NumberDecimalSeparator

Определяет строку, разделяющую целую и дробную части числа.

PositiveSign

Определяет строку, указывающую, что экспонента является положительной.

В следующем примере значения Double форматируются с помощью спецификатора формата приема-передачи.

Dim value As Double

value = Math.Pi
Console.WriteLine(value.ToString("r"))
' Displays 3.1415926535897931
Console.WriteLine(value.ToString("r", _
                  CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 3,1415926535897931
value = 1.623e-21
Console.WriteLine(value.ToString("r"))
' Displays 1.623E-21
double value;

value = Math.PI;
Console.WriteLine(value.ToString("r"));
// Displays 3.1415926535897931
Console.WriteLine(value.ToString("r", 
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 3,1415926535897931
value = 1.623e-21;
Console.WriteLine(value.ToString("r"));
// Displays 1.623E-21

К таблице

Описатель шестнадцатеричного формата ("X")

При использовании описателя шестнадцатеричного формата ("X") число преобразуется в строку шестнадцатеричных цифр. Регистр шестнадцатеричных цифр больше 9 совпадает с регистром описателя формата. Например, чтобы получить запись "ABCDEF", задайте описатель X" или, наоборот, задайте описатель "x", чтобы получить "abcdef". Этот формат доступен только для целых типов.

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

Форматирование результирующей строки не зависит от сведений о форматировании в текущем объекте NumberFormatInfo.

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

Dim value As Integer 

value = &h2045e
Console.WriteLine(value.ToString("x"))
' Displays 2045e
Console.WriteLine(value.ToString("X"))
' Displays 2045E
Console.WriteLine(value.ToString("X8"))
' Displays 0002045E

value = 123456789
Console.WriteLine(value.ToString("X"))
' Displays 75BCD15
Console.WriteLine(value.ToString("X2"))
' Displays 75BCD15
int value; 

value = 0x2045e;
Console.WriteLine(value.ToString("x"));
// Displays 2045e
Console.WriteLine(value.ToString("X"));
// Displays 2045E
Console.WriteLine(value.ToString("X8"));
// Displays 0002045E

value = 123456789;
Console.WriteLine(value.ToString("X"));
// Displays 75BCD15
Console.WriteLine(value.ToString("X2"));
// Displays 75BCD15

К таблице

Примечания

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

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

Кроме того, если конструктор CultureInfo.CultureInfo(String) используется для создания нового объекта CultureInfo, представляющего язык и региональные параметры, аналогичные текущему языку и региональным параметрам системы, то все настройки, заданные в разделе Язык и региональные стандарты панели управления, будут применяться к новому объекту CultureInfo. Можно воспользоваться конструктором CultureInfo.CultureInfo(String, Boolean) для создания объекта CultureInfo, который не отражает настройки системы.

Свойства NumberFormatInfo

На форматирование влияют свойства текущего объекта NumberFormatInfo, который неявно определяется на основе языка и региональных параметров текущего потока или явно задается параметром IFormatProvider метода, который вызывает форматирование. Укажите объект NumberFormatInfo или объект CultureInfo для этого параметра.

Целочисленные типы и типы с плавающей запятой

Некоторые описания спецификаторов стандартных числовых форматов относятся к целочисленным типам и типам с плавающей запятой. Целочисленные типы — это Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64 и BigInteger. Числовыми типами с плавающей запятой являются Decimal, Single и Double.

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

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

Пример

В следующем примере с помощью языка и региональных параметров "en-US" и всех описателей стандартных числовых форматов форматируется целочисленное значение и числовое значение с плавающей запятой. В этом примере используются два числовых типа (Double и Int32), но аналогичные результаты были бы получены для любых других числовых типов (Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, BigInteger, Decimal и Single).

Option Strict On

Imports System.Globalization
Imports System.Threading

Module NumericFormats
   Public Sub Main()
      ' Display string representations of numbers for en-us culture
      Dim ci As New CultureInfo("en-us")

      ' Output floating point values
      Dim floating As Double = 10761.937554
      Console.WriteLine("C: {0}", _
              floating.ToString("C", ci))           ' Displays "C: $10,761.94"
      Console.WriteLine("E: {0}", _
              floating.ToString("E03", ci))         ' Displays "E: 1.076E+004"
      Console.WriteLine("F: {0}", _
              floating.ToString("F04", ci))         ' Displays "F: 10761.9376"         
      Console.WriteLine("G: {0}", _ 
              floating.ToString("G", ci))           ' Displays "G: 10761.937554"
      Console.WriteLine("N: {0}", _
              floating.ToString("N03", ci))         ' Displays "N: 10,761.938"
      Console.WriteLine("P: {0}", _
              (floating/10000).ToString("P02", ci)) ' Displays "P: 107.62 %"
      Console.WriteLine("R: {0}", _
              floating.ToString("R", ci))           ' Displays "R: 10761.937554"            
      Console.WriteLine()

      ' Output integral values
      Dim integral As Integer = 8395
      Console.WriteLine("C: {0}", _
              integral.ToString("C", ci))           ' Displays "C: $8,395.00"
      Console.WriteLine("D: {0}", _
              integral.ToString("D6"))              ' Displays "D: 008395" 
      Console.WriteLine("E: {0}", _
              integral.ToString("E03", ci))         ' Displays "E: 8.395E+003"
      Console.WriteLine("F: {0}", _
              integral.ToString("F01", ci))         ' Displays "F: 8395.0"    
      Console.WriteLine("G: {0}", _ 
              integral.ToString("G", ci))           ' Displays "G: 8395"
      Console.WriteLine("N: {0}", _
              integral.ToString("N01", ci))         ' Displays "N: 8,395.0"
      Console.WriteLine("P: {0}", _
              (integral/10000).ToString("P02", ci)) ' Displays "P: 83.95 %"
      Console.WriteLine("X: 0x{0}", _
              integral.ToString("X", ci))           ' Displays "X: 0x20CB"
      Console.WriteLine()
   End Sub
End Module
using System;
using System.Globalization;
using System.Threading;

public class NumericFormats
{
   public static void Main()
   {
      // Display string representations of numbers for en-us culture
      CultureInfo ci = new CultureInfo("en-us");

      // Output floating point values
      double floating = 10761.937554;
      Console.WriteLine("C: {0}", 
              floating.ToString("C", ci));           // Displays "C: $10,761.94"
      Console.WriteLine("E: {0}", 
              floating.ToString("E03", ci));         // Displays "E: 1.076E+004"
      Console.WriteLine("F: {0}", 
              floating.ToString("F04", ci));         // Displays "F: 10761.9376"         
      Console.WriteLine("G: {0}",  
              floating.ToString("G", ci));           // Displays "G: 10761.937554"
      Console.WriteLine("N: {0}", 
              floating.ToString("N03", ci));         // Displays "N: 10,761.938"
      Console.WriteLine("P: {0}", 
              (floating/10000).ToString("P02", ci)); // Displays "P: 107.62 %"
      Console.WriteLine("R: {0}", 
              floating.ToString("R", ci));           // Displays "R: 10761.937554"            
      Console.WriteLine();

      // Output integral values
      int integral = 8395;
      Console.WriteLine("C: {0}", 
              integral.ToString("C", ci));           // Displays "C: $8,395.00"
      Console.WriteLine("D: {0}", 
              integral.ToString("D6", ci));          // Displays "D: 008395" 
      Console.WriteLine("E: {0}", 
              integral.ToString("E03", ci));         // Displays "E: 8.395E+003"
      Console.WriteLine("F: {0}", 
              integral.ToString("F01", ci));         // Displays "F: 8395.0"    
      Console.WriteLine("G: {0}",  
              integral.ToString("G", ci));           // Displays "G: 8395"
      Console.WriteLine("N: {0}", 
              integral.ToString("N01", ci));         // Displays "N: 8,395.0"
      Console.WriteLine("P: {0}", 
              (integral/10000.0).ToString("P02", ci)); // Displays "P: 83.95 %"
      Console.WriteLine("X: 0x{0}", 
              integral.ToString("X", ci));           // Displays "X: 0x20CB"
      Console.WriteLine();
   }
}

См. также

Задачи

Практическое руководство. Добавление к числу начальных нулей.

Ссылки

NumberFormatInfo

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

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

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

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

Дата

Журнал

Причина

Март 2011

Добавлена ссылка на программу Format Utility.

Улучшение информации.

Июль 2010

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

Обратная связь от клиента.