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


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

Обновлен: Ноябрь 2007

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

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

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

Имя

Описание

C или c

Валюта

Число преобразуется в строку, представляющую денежные единицы. Преобразование регулируется сведениями о форматировании денежных единиц текущего объекта NumberFormatInfo.

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

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

D или d

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

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

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

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

E или e

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

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

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

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

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

F или f

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

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

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

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

G или g

Общий

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

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

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

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

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

N или n

Число

Число преобразуется в строку вида "-d,ddd,ddd.ddd… », где знак '-' при необходимости представляет знак "минус", знак "d" - цифра (0-9), знак "," - разделитель тысяч, а знак "" - разделитель целой и дробной части. Фактический шаблон отрицательного числа, размер групп числа, разделитель тысяч и десятичный разделитель задаются свойствамиNumberNegativePattern, NumberGroupSizes, NumberGroupSeparator и свойством NumberDecimalSeparator, соответственно, текущего объекта NumberFormatInfo.

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

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

P или p

Процент

Число преобразуется в строку, представляющую проценты, как определено свойством NumberFormatInfo.PercentNegativePattern, если число отрицательно, или свойством NumberFormatInfo.PercentPositivePattern, если число положительно. Преобразуемое число умножается на 100, чтобы соответствовать процентам.

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

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

R или r

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

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

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

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

X или x

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

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

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

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

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

Неизвестный спецификатор

(Неизвестный спецификатор инициирует исключение FormatException во время выполнения.)

Примечания

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

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

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

Свойства NumberFormatInfo

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

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

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

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

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

Пример

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

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).ToString("P02", ci)); // Displays "P: 83.95 %"
      Console.WriteLine("X: 0x{0}", 
              integral.ToString("X", ci));           // Displays "X: 0x20CB"
      Console.WriteLine();
   }
}

См. также

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

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

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

Ссылки

NumberFormatInfo

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

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