Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Стандартные числовые строки формата используются для форматирования распространенных числовых типов. Строка стандартного числового формата принимает форму [format specifier][precision specifier]
, где:
Описатель формата — это один алфавитный символ, указывающий тип числа, например валюту или процент. Любая числовая строка формата, содержащая более одного алфавитного символа, включая пробел, интерпретируется как настраиваемая строка числового формата. Дополнительные сведения см. в разделе "Строки настраиваемого числового формата".
Описатель точности является необязательным целым числом, влияющим на число цифр в результирующей строке. В .NET 7 и более поздних версиях максимальное значение точности составляет 999 999 999 999. В .NET 6 максимальное значение точности равно Int32.MaxValue. В предыдущих версиях .NET точность может варьироваться от 0 до 99. Описатель точности управляет числом цифр в строковом представлении числа. Он не округляет само число. Для выполнения операции округления используйте Math.CeilingMath.Floorметод , или Math.Round метод.
Когда описатель точности управляет числом дробных цифр в результирующей строке, результирующий строка отражает число, округленное до представляющего результата, ближайшего к бесконечно точному результату. Если есть два равных практически представленных результата:
- В .NET Framework и .NET Core до .NET Core 2.0 среда выполнения выбирает результат с меньшей значительной цифрой (то есть с помощью MidpointRounding.AwayFromZero).
- В .NET Core 2.1 и более поздних версиях среда выполнения выбирает результат с даже наименьшей значительной цифрой (то есть с помощью MidpointRounding.ToEven).
Примечание.
Описатель точности определяет количество цифр в результирующем строке. Чтобы заполнить строку результатов с начальными или конечными пробелами, используйте функцию составного форматирования и определите компонент ширины в элементе форматирования.
Строки стандартного числового формата поддерживаются следующими:
Некоторые перегрузки
ToString
метода всех числовых типов. Например, можно указать строку Int32.ToString(String) числового формата в методы и Int32.ToString(String, IFormatProvider) методы.Метод
TryFormat
всех числовых типов, например Int32.TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider) и Single.TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider).Компонент составного форматирования .NET, который используется некоторыми
Write
методамиWriteLine
Console и StreamWriter классами, String.Format методом и методомStringBuilder.AppendFormat. Компонент составного формата позволяет включить строковое представление нескольких элементов данных в одну строку, указать ширину поля и выровнять числа в поле. Дополнительные сведения см. в разделе "Составное форматирование".Интерполированные строки в C# и Visual Basic, которые предоставляют упрощенный синтаксис по сравнению со строками составного формата.
Подсказка
Скачать служебную программу форматирования можно приложение .NET Core Windows Forms, которое позволяет применять строки форматирования к числовым или значениям даты и времени и отображает строку результата. Исходный код доступен для C# и Visual Basic.
Описатели формата "Стандартный"
В следующей таблице описаны описатель стандартного числового формата и отображаются примеры выходных данных, созданных каждым описателем формата. Дополнительные сведения об использовании стандартных числовых строк см. в разделе "Заметки ", а также в разделе "Пример кода " для комплексной иллюстрации их использования.
Результат форматируемой строки для определенного языка и региональных параметров может отличаться от следующих примеров. Параметры операционной системы, параметры пользователя, переменные среды и используемая версия .NET могут повлиять на формат. Например, начиная с .NET 5, .NET пытается объединить культурные форматы на разных платформах. Дополнительные сведения см. в статье о глобализации .NET и ICU.
Спецификатор формата | Имя | Описание | Примеры |
---|---|---|---|
"B" или "b" | Бинарный | Результат: двоичная строка. Поддерживается только целыми типами (.NET 8+). Описатель точности: число цифр в результирующем строке. Дополнительные сведения: Описатель формата "двоичный" ("B") |
42 («В») -> 101010 (Английский) 255 ("b16") -> 0000000011111111 |
"C" или "c" | Валюта | Результат: значение валюты. Поддерживается: все числовые типы. Описатель точности: число десятичных цифр. Описатель точности по умолчанию: определяется NumberFormatInfo.CurrencyDecimalDigitsпо умолчанию. Дополнительные сведения: Описатель формата "Валюта" ("C") |
123.456 ("С", en-US) -> \$123.46 123.456 ("С", fr-FR) -> 123,46 € 123.456 ("С", ja-JP) -> 123 -123.456 ("С3", en-US) -> (\$123.456) -123.456 ("С3", fr-FR) -> -123,456 € -123.456 ("С3", ja-JP) -> --123.456 |
"D" или "d" | Десятичное число | Результат: целые цифры с необязательным отрицательным знаком. Поддерживается только целочисленными типами. Описатель точности: минимальное количество цифр. Описатель точности по умолчанию: минимальное количество цифр, необходимых. Дополнительные сведения: описатель формата Десятичного (D) формата. |
1234 ("Д") -> 1234 г. -1234 ("D6") - -> 001234 |
"E" или "e" | Экспоненциальный (научный) | Результат: экспоненциальная нотация. Поддерживается: все числовые типы. Описатель точности: число десятичных цифр. Описатель точности по умолчанию: 6. Дополнительные сведения: Экспоненциальный ("E") Описатель формата. |
1052.0329112756 ("E", en-US) -> 1.052033Э+003 1052.0329112756 ("e", fr-FR) -> 105203e+003 -1052.0329112756 ("Е2", en-US) -> -1.05e+003 -1052.0329112756 ("Е2", fr-FR) -> -105E+003 |
"F" или "f" | Фиксированная точка | Результат: целочисленные и десятичные цифры с необязательным отрицательным знаком. Поддерживается: все числовые типы. Описатель точности: число десятичных цифр. Описатель точности по умолчанию: определяется NumberFormatInfo.NumberDecimalDigitsпо умолчанию. Дополнительные сведения: описатель формата Fixed-Point ("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") ("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.23456789Э-25 -1.234567890e-25 ("G", sv-SE) -> -1,23456789Э-25 |
"N" или "n" | Число | Результат: целочисленные и десятичные цифры, разделители групп и десятичный разделитель с необязательным отрицательным знаком. Поддерживается: все числовые типы. Описатель точности: требуемое число десятичных разрядов. Описатель точности по умолчанию: определяется NumberFormatInfo.NumberDecimalDigitsпо умолчанию. Дополнительные сведения: описатель числовых ("N") форматов. |
1234,567 ("N", en-US) -> 1 234,57 1234.567 ("N", ru-RU) -> 1 234 57 1234 ("N1", en-US) -> 1 234,0 1234 ("N1", ru-RU) -> 1 234 0 -1234.56 ("N3", en-US) -> -1 234.560 -1234.56 ("N3", ru-RU) -> -1 234 560 |
"P" или "p" | Процент | Результат: число умножено на 100 и отображается с символом процента. Поддерживается: все числовые типы. Описатель точности: требуемое число десятичных разрядов. Описатель точности по умолчанию: определяется NumberFormatInfo.PercentDecimalDigitsпо умолчанию. Дополнительные сведения: Описатель формата "Процент" ("P") |
1 («», en-US) -> 100,00 % 1 («», fr-FR) -> 100 000 % -0,39678 ("P1", en-US) -> -39,7 % -0,39678 ("P1", fr-FR) -> -39,7 % |
"R" или "r" | Круговая поездка | Результат: строка, которая может выполнять циклический переход к одинаковому числу. Поддерживается: Single, Double и BigInteger. Примечание. Рекомендуется только для BigInteger типа. Для типов используйте "G17"; для DoubleSingle типов используйте "G9". Описатель точности: игнорируется. Дополнительные сведения: Описатель формата "Круглое путешествие" ("R") |
123456789.12345678 ("Р") -> 123456789.12345678 -1234567890.12345678 ("Р") -> -1234567890.1234567 |
"X" или "x" | Шестнадцатиричный | Результат: шестнадцатеричная строка. Поддерживается только целочисленными типами. Описатель точности: число цифр в результирующем строке. Дополнительные сведения: Описатель шестнадцатеричного формата ("X") . |
255 («Х») -> FF -1 («х») -> ff 255 ("x4") -> 00ff -1 ("X4") -> 00FF |
Любой другой один символ | Неизвестный описатель | Результат: создает FormatException исключение во время выполнения. |
Использование стандартных числовых строк форматирования
Примечание.
Примеры C# в этой статье выполняются в Try.NET встроенном средстве выполнения кода и на игровой площадке. Нажмите кнопку "Выполнить ", чтобы запустить пример в интерактивном окне. После выполнения кода его можно изменить и запустить измененный код, нажав кнопку "Выполнить снова". Измененный код выполняется в интерактивном окне или, если компиляция завершается ошибкой, в интерактивном окне отображаются все сообщения об ошибках компилятора C#.
Стандартная строка числового формата может использоваться для определения форматирования числового значения одним из следующих способов:
Его можно передать
TryFormat
методу или перегрузкеToString
метода, имеющегоformat
параметр. В следующем примере числовое значение форматируется как строка валюты в текущем языке и региональных параметрах (в данном случае en-US языка и региональных параметров).decimal value = 123.456m; Console.WriteLine(value.ToString("C2")); // Displays $123.46
Dim value As Decimal = 123.456d Console.WriteLine(value.ToString("C2")) ' Displays $123.46
Его можно указать в качестве аргумента
formatString
в элементе формата, используемом с такими методами, как String.Format, Console.WriteLineи StringBuilder.AppendFormat. Дополнительные сведения см. в разделе "Составное форматирование". В следующем примере элемент формата используется для вставки значения валюты в строку.decimal value = 123.456m; Console.WriteLine($"Your account balance is {value:C2}."); // Displays "Your account balance is $123.46."
Dim value As Decimal = 123.456d Console.WriteLine("Your account balance is {0:C2}.", value) ' Displays "Your account balance is $123.46."
При необходимости можно указать
alignment
аргумент, чтобы указать ширину числового поля и выровнять его значение по правому или левому краю. В следующем примере по левому краю выравнивается значение валюты в поле 28 символов, и оно выравнивает значение валюты в 14-символьном поле.decimal[] amounts = { 16305.32m, 18794.16m }; Console.WriteLine(" Beginning Balance Ending Balance"); Console.WriteLine(" {0,-28:C2}{1,14:C2}", amounts[0], amounts[1]); // Displays: // Beginning Balance Ending Balance // $16,305.32 $18,794.16
Dim amounts() As Decimal = {16305.32d, 18794.16d} Console.WriteLine(" Beginning Balance Ending Balance") Console.WriteLine(" {0,-28:C2}{1,14:C2}", amounts(0), amounts(1)) ' Displays: ' Beginning Balance Ending Balance ' $16,305.32 $18,794.16
Его можно указать в качестве
formatString
аргумента в элементе интерполированного выражения интерполированной строки. Дополнительные сведения см. в статье интерполяции строк в справочнике по C# или в статье интерполированных строк в справочнике по Visual Basic.
В следующих разделах приведены подробные сведения о каждой строке стандартного числового формата.
Описатель двоичного формата (B)
Описатель двоичного формата ("B") преобразует число в строку двоичных цифр. Этот формат поддерживается только для целочисленных типов и только в .NET 8+.
Описатель точности указывает минимальное количество цифр, необходимых в результирующем строке. При необходимости число заполняется нулем слева, чтобы получить число цифр, заданных описателями точности.
Строка результата не влияет на сведения о форматировании текущего NumberFormatInfo объекта.
Описатель формата валюты (C)
Описатель формата "C" (или валюта) преобразует число в строку, представляющую сумму валюты. Описатель точности указывает требуемое число десятичных разрядов в результирующем строке. Если описатель точности опущен, точность по умолчанию определяется свойством NumberFormatInfo.CurrencyDecimalDigits .
Если значение, которое должно быть отформатировано, превышает указанное или стандартное число десятичных разрядов, дробное значение округляется в результирующий строке. Если значение справа от числа указанных десятичных разрядов равно 5 или больше, то последняя цифра в результирующий строке округляется от нуля.
Строка результата зависит от сведений о форматировании текущего NumberFormatInfo объекта. В следующей таблице перечислены NumberFormatInfo свойства, управляющие форматированием возвращаемой строки.
Свойство NumberFormatInfo | Описание |
---|---|
CurrencyPositivePattern | Определяет размещение символа валюты для положительных значений. |
CurrencyNegativePattern | Определяет размещение символа валюты для отрицательных значений и указывает, представлен ли отрицательный знак скобками или свойством NegativeSign . |
NegativeSign | Определяет отрицательный знак, используемый, если CurrencyNegativePattern указывает, что скобки не используются. |
CurrencySymbol | Определяет символ валюты. |
CurrencyDecimalDigits | Определяет число десятичных цифр по умолчанию в значении валюты. Это значение можно переопределить с помощью описателя точности. |
CurrencyDecimalSeparator | Определяет строку, разделяющую целочисленные и десятичные цифры. |
CurrencyGroupSeparator | Определяет строку, разделяющую группы целочисленных чисел. |
CurrencyGroupSizes | Определяет число целых цифр, отображаемых в группе. |
Следующий пример форматирует Double значение с помощью описателя формата валюты:
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
// 12.345,679 kr
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
Описатель десятичного формата (D)
Описатель формата "D" (или десятичный) преобразует число в строку десятичных цифр (0–9), префиксированную знаком минуса, если число отрицательное. Этот формат поддерживается только для целочисленных типов.
Описатель точности указывает минимальное количество цифр, необходимых в результирующем строке. При необходимости число заполняется нулем слева, чтобы получить число цифр, заданных описателями точности. Если описатель точности не указан, значение по умолчанию является минимальным значением, необходимым для представления целого числа без начальных нулей.
Строка результата зависит от сведений о форматировании текущего NumberFormatInfo объекта. Как показано в следующей таблице, одно свойство влияет на форматирование строки результата.
Свойство NumberFormatInfo | Описание |
---|---|
NegativeSign | Определяет строку, указывающую, что число является отрицательным. |
В следующем примере значение форматируется Int32 с помощью описателя десятичного формата.
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
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
Описатель экспоненциального формата (E)
Описатель формата экспоненциального формата (E) преобразует число в строку формы "-d.dddd... E+dddd или "-d.dddd... e+dddd,где каждое "d" указывает цифру (0-9). Строка начинается со знака минуса, если число отрицательное. Точно одна цифра всегда предшествует десятичной запятой.
Описатель точности указывает требуемое количество цифр после десятичной запятой. Если описатель точности опущен, по умолчанию шесть цифр после использования десятичной запятой.
Регистр описателя формата указывает, следует ли префиксировать экспонент с символом E или e. Экспонент всегда состоит из знака плюса или минуса и минимум трех цифр. Экспонент заполняется нулями, чтобы соответствовать этому минимуму, если это необходимо.
Строка результата зависит от сведений о форматировании текущего NumberFormatInfo объекта. В следующей таблице перечислены NumberFormatInfo свойства, управляющие форматированием возвращаемой строки.
Свойство NumberFormatInfo | Описание |
---|---|
NegativeSign | Определяет строку, указывающую, что число отрицательно для коэффициента и экспонента. |
NumberDecimalSeparator | Определяет строку, которая отделяет целочисленную цифру от десятичных цифр в коэффициенте. |
PositiveSign | Определяет строку, указывающую, что экспонент является положительным. |
Следующий пример форматирует Double значение с помощью описателя экспоненциального формата:
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
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
Описатель формата фиксированной точки (F)
Описатель формата фиксированной точки ("F") преобразует число в строку формы "-ddd.dddd..." где каждое значение "d" обозначает цифру (0–9). Строка начинается со знака минуса, если число отрицательное.
Описатель точности указывает требуемое количество десятичных разрядов. Если описатель точности опущен, текущее NumberFormatInfo.NumberDecimalDigits свойство предоставляет числовую точность.
Строка результата зависит от сведений о форматировании текущего NumberFormatInfo объекта. В следующей таблице перечислены свойства NumberFormatInfo объекта, который управляет форматированием строки результата.
Свойство NumberFormatInfo | Описание |
---|---|
NegativeSign | Определяет строку, указывающую, что число является отрицательным. |
NumberDecimalSeparator | Определяет строку, которая отделяет целочисленные цифры от десятичных цифр. |
NumberDecimalDigits | Определяет число десятичных цифр по умолчанию. Это значение можно переопределить с помощью описателя точности. |
В следующем примере форматируется Double значение и Int32 значение с помощью описателя формата фиксированной точки:
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
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
Описатель общего формата (G)
Общий описатель формата (G) преобразует число в более компактный тип фиксированной или научной нотации в зависимости от типа числа и того, присутствует ли описатель точности. Описатель точности определяет максимальное количество значимых цифр, которые могут отображаться в результирующей строке. Если описатель точности опущен или нулю, тип числа определяет точность по умолчанию, как указано в следующей таблице.
Числовой тип | Точность по умолчанию |
---|---|
Byte или SByte | 3 цифры |
Int16 или UInt16 | 5 цифр |
Int32 или UInt32 | 10 цифр |
Int64 | 19 цифр |
UInt64 | 20 цифр |
BigInteger | Неограниченное (то же, что и "R") |
Half | Наименьшее число цифр для представления числа |
Single | Наименьшее число цифр для представления числа (в .NET Framework G7 — значение по умолчанию) |
Double | Наименьшее число цифр для представления числа (в .NET Framework G15 — значение по умолчанию) |
Decimal | Наименьшее число цифр для представления числа |
Нотация фиксированной точки используется, если экспонент, который будет результатом выражения числа в научной нотации, больше -5 и меньше описателя точности; в противном случае используется научное нотация. Результат содержит десятичную точку, если это необходимо, и конечные нули после десятичной запятой опущены. Если описатель точности присутствует, а количество значимых цифр в результате превышает указанную точность, то избыточные конечные цифры удаляются округлением.
Однако если число является и Decimal описатель точности опущен, нотация фиксированной точки всегда используется, а конечные нули сохраняются.
Если используется научное нотация, экспонент в результате префиксируется с "E", если описатель формата " G" или "e", если описатель формата имеет значение "g". Экспонент содержит не менее двух цифр. Это отличается от формата научной нотации, созданной описателями экспоненциального формата, которая включает не менее трех цифр в экспоненте.
При использовании со Double значением описатель формата G17 гарантирует, что исходное Double значение успешно выполняет круговые пути. Это связано с Double номером с плавающейbinary64
запятой IEEE 754-2008, которое дает до 17 значимых цифр точности. В .NET Framework рекомендуется использовать его вместо описателя формата R, так как в некоторых случаях "R" не удается успешно выполнить двойной точности с плавающей запятой.
При использовании со Single значением описатель формата G9 гарантирует, что исходное Single значение успешно выполняет круговые пути. Это связано с тем, что Single значение IEEE 754-2008, совместимое с одной точностью (binary32
) с плавающей запятой, которое дает до девяти значимых цифр точности. По соображениям производительности рекомендуется использовать его вместо описателя формата R.
Строка результата зависит от сведений о форматировании текущего NumberFormatInfo объекта. В следующей таблице перечислены NumberFormatInfo свойства, управляющие форматированием строки результата.
Свойство NumberFormatInfo | Описание |
---|---|
NegativeSign | Определяет строку, указывающую, что число является отрицательным. |
NumberDecimalSeparator | Определяет строку, которая отделяет целочисленные цифры от десятичных цифр. |
PositiveSign | Определяет строку, указывающую, что экспонент является положительным. |
В следующем примере форматируются каксортные значения с плавающей запятой с помощью общего описателя формата:
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
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
Описатель числовых форматов (N)
Описатель формата "N") преобразует число в строку формы "-d",ddd,d.ddd...", где "-" указывает отрицательный символ числа при необходимости, "d" указывает цифру (0-9), ""," указывает разделитель группы и "." указывает десятичный знак. Описатель точности указывает требуемое количество цифр после десятичной запятой. Если описатель точности опущен, число десятичных разрядов определяется текущим NumberFormatInfo.NumberDecimalDigits свойством.
Строка результата зависит от сведений о форматировании текущего NumberFormatInfo объекта. В следующей таблице перечислены NumberFormatInfo свойства, управляющие форматированием строки результата.
Свойство NumberFormatInfo | Описание |
---|---|
NegativeSign | Определяет строку, указывающую, что число является отрицательным. |
NumberNegativePattern | Определяет формат отрицательных значений и указывает, представлен ли отрицательный знак скобками или свойством NegativeSign . |
NumberGroupSizes | Определяет количество целочисленных цифр, отображаемых между разделителями групп. |
NumberGroupSeparator | Определяет строку, разделяющую группы целочисленных чисел. |
NumberDecimalSeparator | Определяет строку, разделяющую целочисленные и десятичные цифры. |
NumberDecimalDigits | Определяет число десятичных цифр по умолчанию. Это значение можно переопределить с помощью описателя точности. |
В следующем примере форматируются значения с плавающей запятой с описательом числовых форматов:
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
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
Описатель формата процента (P)
Описатель формата "процент" ("P") умножает число на 100 и преобразует его в строку, представляющую процент. Описатель точности указывает требуемое количество десятичных разрядов. Если описатель точности опущен, используется числовая точность по умолчанию, предоставляемая текущим PercentDecimalDigits свойством.
В следующей таблице перечислены NumberFormatInfo свойства, управляющие форматированием возвращаемой строки.
Свойство NumberFormatInfo | Описание |
---|---|
PercentPositivePattern | Определяет размещение символа процента для положительных значений. |
PercentNegativePattern | Определяет размещение символа процента и отрицательного символа для отрицательных значений. |
NegativeSign | Определяет строку, указывающую, что число является отрицательным. |
PercentSymbol | Определяет символ процента. |
PercentDecimalDigits | Определяет число десятичных цифр по умолчанию в процентном значении. Это значение можно переопределить с помощью описателя точности. |
PercentDecimalSeparator | Определяет строку, разделяющую целочисленные и десятичные цифры. |
PercentGroupSeparator | Определяет строку, разделяющую группы целочисленных чисел. |
PercentGroupSizes | Определяет число целых цифр, отображаемых в группе. |
В следующем примере форматирует значения с плавающей запятой с описателями формата процента:
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 %
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 %
Описатель формата кругового пути (R)
Описатель формата "R") пытается убедиться, что числовое значение, преобразованное в строку, анализируется обратно в то же числовое значение. Этот формат поддерживается только для Halfтипов , SingleDoubleи BigInteger типов.
В .NET Framework и в версиях .NET Core до версии 3.0 описатель формата R не может успешно выполнить циклический обход Double значений в некоторых случаях. Для обоих Double значений Single описатель формата R обеспечивает относительно низкую производительность. Вместо этого рекомендуется использовать описатель формата G17 для Double значений и описатель формата G9 для успешного обхода Single значений.
BigInteger Если значение отформатировано с помощью этого описателя, его строковое представление содержит все значимые цифры в значенииBigInteger.
Хотя вы можете включить описатель точности, он игнорируется. Круглые пути имеют приоритет над точностью при использовании этого описателя. Строка результата зависит от сведений о форматировании текущего NumberFormatInfo объекта. В следующей таблице перечислены NumberFormatInfo свойства, управляющие форматированием строки результата.
Свойство NumberFormatInfo | Описание |
---|---|
NegativeSign | Определяет строку, указывающую, что число является отрицательным. |
NumberDecimalSeparator | Определяет строку, которая отделяет целочисленные цифры от десятичных цифр. |
PositiveSign | Определяет строку, указывающую, что экспонент является положительным. |
В следующем примере значение форматируется BigInteger с помощью описателя формата кругового пути.
using System;
using System.Numerics;
public class Example
{
public static void Main()
{
var value = BigInteger.Pow(Int64.MaxValue, 2);
Console.WriteLine(value.ToString("R"));
}
}
// The example displays the following output:
// 85070591730234615847396907784232501249
Imports System.Numerics
Module Example
Public Sub Main()
Dim value = BigInteger.Pow(Int64.MaxValue, 2)
Console.WriteLine(value.ToString("R"))
End Sub
End Module
' The example displays the following output:
' 85070591730234615847396907784232501249
Это важно
В некоторых случаях значения, отформатированные со стандартной строкой числового формата R, Double не успешно выполняются при компиляции с помощью /platform:x64
64-разрядных систем или /platform:anycpu
коммутаторов. Дополнительные сведения см. в следующем абзаце.
Чтобы обойти проблему значенийDouble, отформатированных со стандартной строкой числового формата R, не успешной обходной передачи при компиляции с помощью /platform:x64
/platform:anycpu
64-разрядных систем, можно форматировать Double значения с помощью стандартной числовой строки "G17". В следующем примере используется строка формата "R" со Double значением, которое не успешно выполняет круговые пути, а также использует строку формата G17 для успешного обхода исходного значения:
Console.WriteLine("Attempting to round-trip a Double with 'R':");
double initialValue = 0.6822871999174;
string valueString = initialValue.ToString("R",
CultureInfo.InvariantCulture);
double roundTripped = double.Parse(valueString,
CultureInfo.InvariantCulture);
Console.WriteLine($"{initialValue:R} = {roundTripped:R}: {initialValue.Equals(roundTripped)}\n");
Console.WriteLine("Attempting to round-trip a Double with 'G17':");
string valueString17 = initialValue.ToString("G17",
CultureInfo.InvariantCulture);
double roundTripped17 = double.Parse(valueString17,
CultureInfo.InvariantCulture);
Console.WriteLine($"{initialValue:R} = {roundTripped17:R}: {initialValue.Equals(roundTripped17)}\n");
// If compiled to an application that targets anycpu or x64 and run on an x64 system,
// the example displays the following output:
// Attempting to round-trip a Double with 'R':
// .NET Framework:
// 0.6822871999174 = 0.68228719991740006: False
// .NET:
// 0.6822871999174 = 0.6822871999174: True
//
// Attempting to round-trip a Double with 'G17':
// 0.6822871999174 = 0.6822871999174: True
Imports System.Globalization
Module Example
Public Sub Main()
Console.WriteLine("Attempting to round-trip a Double with 'R':")
Dim initialValue As Double = 0.6822871999174
Dim valueString As String = initialValue.ToString("R",
CultureInfo.InvariantCulture)
Dim roundTripped As Double = Double.Parse(valueString,
CultureInfo.InvariantCulture)
Console.WriteLine("{0:R} = {1:R}: {2}",
initialValue, roundTripped, initialValue.Equals(roundTripped))
Console.WriteLine()
Console.WriteLine("Attempting to round-trip a Double with 'G17':")
Dim valueString17 As String = initialValue.ToString("G17",
CultureInfo.InvariantCulture)
Dim roundTripped17 As Double = double.Parse(valueString17,
CultureInfo.InvariantCulture)
Console.WriteLine("{0:R} = {1:R}: {2}",
initialValue, roundTripped17, initialValue.Equals(roundTripped17))
End Sub
End Module
' If compiled to an application that targets anycpu or x64 and run on an x64 system,
' the example displays the following output:
' Attempting to round-trip a Double with 'R':
' .NET Framework:
' 0.6822871999174 = 0.68228719991740006: False
' .NET:
' 0.6822871999174 = 0.6822871999174: True
'
' Attempting to round-trip a Double with 'G17':
' 0.6822871999174 = 0.6822871999174: True
Описатель шестнадцатеричного формата (X)
Описатель шестнадцатеричного формата ("X") преобразует число в строку шестнадцатеричных цифр. Регистр описателя формата указывает, следует ли использовать символы верхнего или нижнего регистра для шестнадцатеричных цифр, превышающих 9. Например, используйте "X" для создания ABCDEF и x для создания "abcdef". Этот формат поддерживается только для целочисленных типов.
Описатель точности указывает минимальное количество цифр, необходимых в результирующем строке. При необходимости число заполняется нулем слева, чтобы получить число цифр, заданных описателями точности.
Строка результата не влияет на сведения о форматировании текущего NumberFormatInfo объекта.
Следующий пример форматирует Int32 значения с шестнадцатеричным описательом формата.
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
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
Примечания.
В этом разделе содержатся дополнительные сведения об использовании стандартных строк числовых форматов.
Параметры панели управления
Параметры в элементе "Региональные и языковые параметры " на панели управления влияют на строку результатов, созданную операцией форматирования. Эти параметры используются для инициализации объекта, связанного NumberFormatInfo с текущим языком и региональных параметров, который предоставляет значения, используемые для управления форматированием. Компьютеры, использующие разные параметры, создают разные строки результатов.
Кроме того, если CultureInfo(String) конструктор используется для создания экземпляра нового объекта, представляющего тот CultureInfo же язык и региональные параметры, что и текущий язык и региональные параметры, все настройки, установленные элементом региональных и языковых параметров на панели управления, будут применены к новому CultureInfo объекту. Конструктор можно использовать CultureInfo(String, Boolean) для создания CultureInfo объекта, который не отражает настройки системы.
Свойства NumberFormatInfo
Форматирование зависит от свойств текущего NumberFormatInfo объекта, который предоставляется неявно текущим языком и региональными параметрами или явным образом IFormatProvider параметром метода, вызывающего форматирование. NumberFormatInfo CultureInfo Укажите или объект для этого параметра.
Примечание.
Сведения о настройке шаблонов или строк, используемых в форматировании числовых значений, см. в NumberFormatInfo разделе класса.
Целочисленные и числовые типы с плавающей запятой
Некоторые описания описателей стандартного числового формата ссылаются на целочисленные или числовые типы с плавающей запятой. Целочисленные числовые типы: Byte, SByte, Int16Int32Int64UInt16, , UInt32UInt64и .BigInteger Числовые типы с плавающей запятой : Decimal, HalfSingleи Double.
Значения с плавающей запятой и NaN
Независимо от строки формата, если значение Halfтипа с SingleDouble плавающей запятой является положительным бесконечностью, отрицательным бесконечностью или не числом (NaN), форматированная строка является значением соответствующего PositiveInfinitySymbolNegativeInfinitySymbolNaNSymbolили свойства, указанного текущим применимым NumberFormatInfo объектом.
Пример кода
Следующий пример форматирует целочисленное и числовое значение с плавающей запятой с помощью языка и региональных параметров en-US и всех стандартных числовых описателей. В этом примере используются два конкретных числовых типа (Doubleи), но аналогичные результаты будут даваться для любого из других числовых базовых типов (Int32, , Byte, SByteInt16Int32Int64UInt16UInt32UInt64BigIntegerи ).DecimalHalfSingle
// 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: {floating.ToString("C", ci)}"); // Displays "C: $10,761.94"
Console.WriteLine($"E: {floating.ToString("E03", ci)}"); // Displays "E: 1.076E+004"
Console.WriteLine($"F: {floating.ToString("F04", ci)}"); // Displays "F: 10761.9376"
Console.WriteLine($"G: {floating.ToString("G", ci)}"); // Displays "G: 10761.937554"
Console.WriteLine($"N: {floating.ToString("N03", ci)}"); // Displays "N: 10,761.938"
Console.WriteLine($"P: {(floating/10000).ToString("P02", ci)}"); // Displays "P: 107.62 %"
Console.WriteLine($"R: {floating.ToString("R", ci)}"); // Displays "R: 10761.937554"
Console.WriteLine();
// Output integral values
int integral = 8395;
Console.WriteLine($"C: {integral.ToString("C", ci)}"); // Displays "C: $8,395.00"
Console.WriteLine($"D: {integral.ToString("D6", ci)}"); // Displays "D: 008395"
Console.WriteLine($"E: {integral.ToString("E03", ci)}"); // Displays "E: 8.395E+003"
Console.WriteLine($"F: {integral.ToString("F01", ci)}"); // Displays "F: 8395.0"
Console.WriteLine($"G: {integral.ToString("G", ci)}"); // Displays "G: 8395"
Console.WriteLine($"N: {integral.ToString("N01", ci)}"); // Displays "N: 8,395.0"
Console.WriteLine($"P: {(integral/10000.0).ToString("P02", ci)}"); // Displays "P: 83.95 %"
Console.WriteLine($"X: 0x{integral.ToString("X", ci)}"); // Displays "X: 0x20CB"
Console.WriteLine();
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
См. также
- NumberFormatInfo
- Пользовательские числовые строки форматирования
- Типы форматирования
- Практическое руководство. Заполнение числа с начальными нулями
- Составное форматирование
- Пример: программа форматирования WinForms для .NET Core (C#)
- Пример: программа форматирования WinForms для .NET Core (Visual Basic)