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


BigInteger.Parse Метод

Определение

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

Перегрузки

Parse(String)

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

Parse(ReadOnlySpan<Char>, IFormatProvider)

Анализирует диапазон символов в значение.

Parse(String, NumberStyles)

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

Parse(String, IFormatProvider)

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

Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider)

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

Parse(String, NumberStyles, IFormatProvider)

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

Parse(String)

Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs

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

public:
 static System::Numerics::BigInteger Parse(System::String ^ value);
public static System.Numerics.BigInteger Parse (string value);
static member Parse : string -> System.Numerics.BigInteger
Public Shared Function Parse (value As String) As BigInteger

Параметры

value
String

Строка, содержащая преобразуемое число.

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

Значение, эквивалентное числу, которое задается параметром value.

Исключения

value имеет значение null.

value имеет неправильный формат.

Примеры

В следующем примере метод используется Parse(String) для создания экземпляров двух BigInteger объектов . Он умножает каждый объект на другое Compare число, а затем вызывает метод для определения связи между двумя значениями.

string stringToParse = String.Empty;
try
{
   // Parse two strings.
   string string1, string2;
   string1 = "12347534159895123";
   string2 = "987654321357159852";
   stringToParse = string1;
   BigInteger number1 = BigInteger.Parse(stringToParse);
   Console.WriteLine("Converted '{0}' to {1:N0}.", stringToParse, number1);
   stringToParse = string2;
   BigInteger number2 = BigInteger.Parse(stringToParse);
   Console.WriteLine("Converted '{0}' to {1:N0}.", stringToParse, number2);
   // Perform arithmetic operations on the two numbers.
   number1 *= 3;
   number2 *= 2;
   // Compare the numbers.
   int result = BigInteger.Compare(number1, number2);
   switch (result)
   {
      case -1:
         Console.WriteLine("{0} is greater than {1}.", number2, number1);
         break;
      case 0:
         Console.WriteLine("{0} is equal to {1}.", number1, number2);
         break;
      case 1:
         Console.WriteLine("{0} is greater than {1}.", number1, number2);
         break;
   }
}
catch (FormatException)
{
   Console.WriteLine("Unable to parse {0}.", stringToParse);
}
// The example displays the following output:
//    Converted '12347534159895123' to 12,347,534,159,895,123.
//    Converted '987654321357159852' to 987,654,321,357,159,852.
//    1975308642714319704 is greater than 37042602479685369.
    let mutable stringToParse = ""

    try
        // Parse two strings.
        let string1 = "12347534159895123"
        let string2 = "987654321357159852"
        stringToParse <- string1
        let number1 = BigInteger.Parse stringToParse
        printfn $"Converted '{stringToParse}' to {number1:N0}."
        stringToParse <- string2
        let number2 = BigInteger.Parse stringToParse
        printfn $"Converted '{stringToParse}' to {number2:N0}."
        // Perform arithmetic operations on the two numbers.
        let number1 = number1 * bigint 3
        let number2 = number2 * bigint 2
        // Compare the numbers.
        let result = BigInteger.Compare(number1, number2)

        match result with
        | -1 -> printfn $"{number2:N0} is greater than {number1:N0}."
        | 0 -> printfn $"{number1:N0} is equal to {number2:N0}."
        | 1
        | _ -> printfn $"{number1:N0} is greater than {number2:N0}."
    with :? FormatException ->
        printfn $"Unable to parse {stringToParse}."

// The example displays the following output:
//    Converted '12347534159895123' to 12,347,534,159,895,123.
//    Converted '987654321357159852' to 987,654,321,357,159,852.
//    1975308642714319704 is greater than 37042602479685369.
Dim stringToParse As String = String.Empty
Try
   ' Parse two strings.
   Dim string1, string2 As String
   string1 = "12347534159895123"
   string2 = "987654321357159852"
   stringToParse = string1
   Dim number1 As BigInteger = BigInteger.Parse(stringToParse)
   Console.WriteLine("Converted '{0}' to {1:N0}.", stringToParse, number1)
   stringToParse = string2
   Dim number2 As BigInteger = BigInteger.Parse(stringToParse)
   Console.WriteLine("Converted '{0}' to {1:N0}.", stringToParse, number2)
   ' Perform arithmetic operations on the two numbers.
   number1 *= 3
   number2 *= 2
   ' Compare the numbers.
   Select Case BigInteger.Compare(number1, number2)
      Case -1
         Console.WriteLine("{0} is greater than {1}.", number2, number1)
      Case 0
         Console.WriteLine("{0} is equal to {1}.", number1, number2)
      Case 1
         Console.WriteLine("{0} is greater than {1}.", number1, number2)
   End Select      
Catch e As FormatException
   Console.WriteLine("Unable to parse {0}.", stringToParse)
End Try
' The example displays the following output:
'    Converted '12347534159895123' to 12,347,534,159,895,123.
'    Converted '987654321357159852' to 987,654,321,357,159,852.
'    1975308642714319704 is greater than 37042602479685369.

Комментарии

Параметр value должен быть строковым представлением числа в следующей форме.

[ws] [sign] digits[ws]

Элементы в квадратных скобках ([и]) являются необязательными. Каждый из элементов описан в таблице ниже.

Элемент Описание
ws Необязательный пробел.
sign Необязательный знак. Допустимые знаковые знаки определяются свойствами NumberFormatInfo.NegativeSign и текущего языка и NumberFormatInfo.PositiveSign региональных параметров.
digits Последовательность цифр в диапазоне от 0 до 9. Любые нули в начале игнорируются.

Примечание

Строка, указанная параметром value , интерпретируется с помощью NumberStyles.Integer стиля . Он не может содержать разделители групп или десятичный разделитель и не может содержать десятичную часть.

Параметр value анализируется с помощью сведений о форматировании в объекте System.Globalization.NumberFormatInfo , инициализированном для текущего системного языка и региональных параметров. Для получения дополнительной информации см. NumberFormatInfo.CurrentInfo. Чтобы проанализировать строку с помощью сведений о форматировании определенного языка и региональных параметров, используйте Parse(String, IFormatProvider) метод .

Важно!

Если метод используется Parse для кругового пути строкового BigInteger представления значения, которое было выведено методом ToString , следует использовать BigInteger.ToString(String) метод с описателем формата "R", чтобы создать строковое представление BigInteger значения. В противном случае строковое представление BigInteger сохраняет только 50 наиболее значимых цифр исходного значения, и данные могут быть потеряны при использовании Parse метода для восстановления BigInteger значения.

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

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

Parse(ReadOnlySpan<Char>, IFormatProvider)

Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs

Анализирует диапазон символов в значение.

public:
 static System::Numerics::BigInteger Parse(ReadOnlySpan<char> s, IFormatProvider ^ provider) = ISpanParsable<System::Numerics::BigInteger>::Parse;
public static System.Numerics.BigInteger Parse (ReadOnlySpan<char> s, IFormatProvider? provider);
static member Parse : ReadOnlySpan<char> * IFormatProvider -> System.Numerics.BigInteger
Public Shared Function Parse (s As ReadOnlySpan(Of Char), provider As IFormatProvider) As BigInteger

Параметры

s
ReadOnlySpan<Char>

Диапазон символов для анализа.

provider
IFormatProvider

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

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

Результат анализа s.

Реализации

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

Parse(String, NumberStyles)

Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs

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

public:
 static System::Numerics::BigInteger Parse(System::String ^ value, System::Globalization::NumberStyles style);
public static System.Numerics.BigInteger Parse (string value, System.Globalization.NumberStyles style);
static member Parse : string * System.Globalization.NumberStyles -> System.Numerics.BigInteger
Public Shared Function Parse (value As String, style As NumberStyles) As BigInteger

Параметры

value
String

Строка, содержащая преобразуемое число.

style
NumberStyles

Побитовое сочетание значений перечисления, которое показывает разрешенный формат параметра value.

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

Значение, эквивалентное числу, которое задается параметром value.

Исключения

style не является значением NumberStyles.

-или-

style включает флаги AllowHexSpecifier и HexNumber вместе с другим значениями.

value имеет значение null.

value не соответствует образцу ввода, заданному NumberStyles.

Примеры

В следующем примере показаны вызовы Parse(String, NumberStyles) метода с несколькими возможными значениями style для параметра . В нем показано, как интерпретировать строку как шестнадцатеричное значение, а также как запретить пробелы и знаковые символы.

BigInteger number;
// Method should succeed (white space and sign allowed)
number = BigInteger.Parse("   -68054   ", NumberStyles.Integer);
Console.WriteLine(number);
// Method should succeed (string interpreted as hexadecimal)
number = BigInteger.Parse("68054", NumberStyles.AllowHexSpecifier);
Console.WriteLine(number);
// Method call should fail: sign not allowed
try
{
   number = BigInteger.Parse("   -68054  ", NumberStyles.AllowLeadingWhite
                                            | NumberStyles.AllowTrailingWhite);
   Console.WriteLine(number);
}
catch (FormatException e)
{
   Console.WriteLine(e.Message);
}
// Method call should fail: white space not allowed
try
{
   number = BigInteger.Parse("   68054  ", NumberStyles.AllowLeadingSign);
   Console.WriteLine(number);
}
catch (FormatException e)
{
   Console.WriteLine(e.Message);
}
//
// The method produces the following output:
//
//     -68054
//     426068
//     Input string was not in a correct format.
//     Input string was not in a correct format.
    let number = BigInteger.Parse("   -68054   ", NumberStyles.Integer)
    printfn $"{number}"
    let number = BigInteger.Parse("68054", NumberStyles.AllowHexSpecifier)
    printfn $"{number}"

    try
        let number =
            BigInteger.Parse("   -68054  ", NumberStyles.AllowLeadingWhite ||| NumberStyles.AllowTrailingWhite)

        printfn $"{number}"
    with :? FormatException as e ->
        printfn $"{e.Message}"

    try
        let number = BigInteger.Parse("   68054  ", NumberStyles.AllowLeadingSign)
        printfn $"{number}"
    with :? FormatException as e ->
        printfn $"{e.Message}"
// The method produces the following output:
//     -68054
//     426068
//     Input string was not in a correct format.
//     Input string was not in a correct format.
Dim number As BigInteger 
' Method should succeed (white space and sign allowed)
number = BigInteger.Parse("   -68054   ", NumberStyles.Integer)
Console.WriteLine(number)
' Method should succeed (string interpreted as hexadecimal)
number = BigInteger.Parse("68054", NumberStyles.AllowHexSpecifier)
Console.WriteLine(number)
' Method call should fail: sign not allowed
Try
   number = BigInteger.Parse("   -68054  ", NumberStyles.AllowLeadingWhite _
                                            Or NumberStyles.AllowTrailingWhite)
   Console.WriteLine(number)
Catch e As FormatException
   Console.WriteLine(e.Message)
End Try                                                     
' Method call should fail: white space not allowed
Try
   number = BigInteger.Parse("   68054  ", NumberStyles.AllowLeadingSign)
   Console.WriteLine(number)
Catch e As FormatException
   Console.WriteLine(e.Message)
End Try    
'
' The method produces the following output:
'
'     -68054
'     426068
'     Input string was not in a correct format.
'     Input string was not in a correct format.

Комментарии

Параметр style определяет элементы стиля (например, пробелы, символы положительного или отрицательного знака, символ разделителя групп или символ десятичной запятой), которые разрешены в value параметре для успешного выполнения операции синтаксического анализа. styles должен быть сочетанием битовых флагов из перечисления NumberStyles . Параметр style делает эту перегрузку метода полезной, если value содержит строковое представление шестнадцатеричного значения, когда система чисел (десятичная или шестнадцатеричная), представленная value , известна только во время выполнения или если требуется запретить пробелы или символ знака в value.

В зависимости от значения styleпараметр value может включать следующие элементы:

[ws] [$][знак][цифры,]цифры[.fractional_digits][E[sign]exponential_digits][ws]

Если style параметр включает NumberStyles.AllowHexSpecifier, value параметр может содержать следующие элементы:

[ws] hexdigits[ws]

Элементы в квадратных скобках ([и]) являются необязательными. Каждый из элементов описан в таблице ниже.

Элемент Описание
ws Необязательный пробел. Пробел может отображаться в начале value , если style включает NumberStyles.AllowLeadingWhite флаг, и в конце value , если style включает NumberStyles.AllowTrailingWhite флаг.
$ Символ валюты для конкретного языка и региональных параметров. Его положение в строке определяется свойствами NumberFormatInfo.CurrencyNegativePattern и текущего языка и NumberFormatInfo.CurrencyPositivePattern региональных параметров. Символ валюты текущего языка и региональных параметров может отображаться в , value если style включает флаг NumberStyles.AllowCurrencySymbol .
sign Необязательный знак. Знак может отображаться в начале value , если style включает NumberStyles.AllowLeadingSign флаг, и в конце value , если style включает NumberStyles.AllowTrailingSign флаг . Круглые скобки можно использовать в , value чтобы указать отрицательное значение, если style включает флаг NumberStyles.AllowParentheses .
digits

fractional_digits

exponential_digits
Последовательность цифр от 0 до 9. Для fractional_digits допустима только цифра 0.
, Символ разделителя групп, относящихся к языку и региональным параметрам. Разделитель групп текущего языка и региональных параметров может отображаться в , value если style включает NumberStyles.AllowThousands флаг .
. Символ десятичной запятой для конкретного языка и региональных параметров. Символ десятичной запятой текущего языка и региональных параметров может отображаться в , value если style включает флаг NumberStyles.AllowDecimalPoint . Только цифра 0 может отображаться в качестве дробной цифры для успешного выполнения операции синтаксического анализа; Если fractional_digits включает любую другую цифру FormatException , возникает исключение .
E Символ "e" или "E", который указывает, что значение представлено в экспоненциальной (научной) нотации. Параметр value может представлять число в экспоненциальной нотации, если style включает флаг NumberStyles.AllowExponent .
hexdigits Последовательность шестнадцатеричных цифр от 0 до f или от 0 до F.

Примечание

Все завершающие символы NUL (U+0000) в s игнорируются операцией синтаксического анализа независимо от значения аргумента style .

Строка только с цифрами (которая соответствует стилю NumberStyles.None ) всегда успешно анализируется. Большинство остальных элементов управляют элементами NumberStyles , которые могут присутствовать, но не обязательно должны присутствовать во входной строке. В следующей таблице показано, как отдельные NumberStyles элементы влияют на элементы, которые могут присутствовать в value.

Значение NumberStyles Элементы, разрешенные в value дополнение к цифрам
None Только элемент digits .
AllowDecimalPoint Элементы десятичной запятой (.) и дробными цифрами .
AllowExponent Символ "e" или "E", который обозначает экспоненциальную нотацию, а также exponential_digits.
AllowLeadingWhite Элемент ws в начале value.
AllowTrailingWhite Элемент ws в конце value.
AllowLeadingSign Элемент sign в начале value.
AllowTrailingSign Элемент sign в конце value.
AllowParentheses Элемент sign в виде круглых скобок, включающих числовое значение.
AllowThousands Элемент разделителя групп (,).
AllowCurrencySymbol Элемент currency ($).
Currency Все элементы. value Однако не может представлять шестнадцатеричное число или число в экспоненциальной нотации.
Float Элемент ws в начале или в конце value, знак в начале valueи символ десятичной запятой (.). Параметр value также может использовать экспоненциальную нотацию.
Number Элементы ws, sign, разделитель групп (,) и десятичная запятая (.) .
Any Все элементы. value Однако не может представлять шестнадцатеричное число.

Важно!

Если метод используется Parse для кругового пути строкового BigInteger представления значения, которое было выведено методом ToString , следует использовать BigInteger.ToString(String) метод с описателем формата "R", чтобы создать строковое представление BigInteger значения. В противном случае строковое представление BigInteger сохраняет только 50 наиболее значимых цифр исходного значения, и данные могут быть потеряны при использовании Parse метода для восстановления BigInteger значения.

В отличие от других NumberStyles значений, которые допускают, но не требуют наличия определенных элементов стиля в value, NumberStyles.AllowHexSpecifier значение стиля означает, что отдельные числовые символы в value всегда интерпретируются как шестнадцатеричные символы. Допустимые шестнадцатеричные символы: 0–9, A–F и a-f. Единственными другими флагами, которые можно объединить с параметром style , являются NumberStyles.AllowLeadingWhite и NumberStyles.AllowTrailingWhite. (Перечисление NumberStyles включает стиль составных чисел , HexNumberкоторый включает оба флага пробела.)

Примечание

Если value является строковым представлением шестнадцатеричного числа, ему не может предшествовать какое-либо украшение (например 0x , или &h), которое различает его как шестнадцатеричное число. Это приводит к сбою преобразования.

Если value является шестнадцатеричной строкой, метод интерпретирует value как отрицательное число, Parse(String, NumberStyles) хранящееся с помощью представления дополнения двух, если первые две шестнадцатеричные цифры больше или равны 0x80. Другими словами, метод интерпретирует бит верхнего порядка первого байта в value как бит знака. Чтобы убедиться, что шестнадцатеричная строка правильно интерпретируется как положительное число, первая цифра в value должна иметь нулевое значение. Например, метод интерпретирует 0x80 как отрицательное значение, но интерпретирует или 0x00800x080 как положительное значение. В следующем примере показана разница между шестнадцатеричными строками, представляющими отрицательные и положительные значения.

using System;
using System.Globalization;
using System.Numerics;

public class Example
{
   public static void Main()
   {
      string[] hexStrings = { "80", "E293", "F9A2FF", "FFFFFFFF",
                              "080", "0E293", "0F9A2FF", "0FFFFFFFF",
                              "0080", "00E293", "00F9A2FF", "00FFFFFFFF" };
      foreach (string hexString in hexStrings)
      {
         BigInteger number = BigInteger.Parse(hexString, NumberStyles.AllowHexSpecifier);
         Console.WriteLine("Converted 0x{0} to {1}.", hexString, number);
      }
   }
}
// The example displays the following output:
//       Converted 0x80 to -128.
//       Converted 0xE293 to -7533.
//       Converted 0xF9A2FF to -417025.
//       Converted 0xFFFFFFFF to -1.
//       Converted 0x080 to 128.
//       Converted 0x0E293 to 58003.
//       Converted 0x0F9A2FF to 16360191.
//       Converted 0x0FFFFFFFF to 4294967295.
//       Converted 0x0080 to 128.
//       Converted 0x00E293 to 58003.
//       Converted 0x00F9A2FF to 16360191.
//       Converted 0x00FFFFFFFF to 4294967295.
open System.Globalization
open System.Numerics

let hexStrings =
    [| "80"
       "E293"
       "F9A2FF"
       "FFFFFFFF"
       "080"
       "0E293"
       "0F9A2FF"
       "0FFFFFFFF"
       "0080"
       "00E293"
       "00F9A2FF"
       "00FFFFFFFF" |]

for hexString in hexStrings do
    let number = BigInteger.Parse(hexString, NumberStyles.AllowHexSpecifier)
    printfn $"Converted 0x{hexString} to {number:N0}."
// The example displays the following output:
//       Converted 0x80 to -128.
//       Converted 0xE293 to -7533.
//       Converted 0xF9A2FF to -417025.
//       Converted 0xFFFFFFFF to -1.
//       Converted 0x080 to 128.
//       Converted 0x0E293 to 58003.
//       Converted 0x0F9A2FF to 16360191.
//       Converted 0x0FFFFFFFF to 4294967295.
//       Converted 0x0080 to 128.
//       Converted 0x00E293 to 58003.
//       Converted 0x00F9A2FF to 16360191.
//       Converted 0x00FFFFFFFF to 4294967295.
Imports System.Globalization
Imports System.Numerics

Module Example
   Public Sub Main()
      Dim hexStrings() As String = { "80", "E293", "F9A2FF", "FFFFFFFF", 
                                     "080", "0E293", "0F9A2FF", "0FFFFFFFF",  
                                     "0080", "00E293", "00F9A2FF", "00FFFFFFFF" }
      For Each hexString As String In hexStrings
         Dim number As BigInteger = BigInteger.Parse(hexString, NumberStyles.AllowHexSpecifier)
         Console.WriteLine("Converted 0x{0} to {1}.", hexString, number)
      Next         
   End Sub
End Module
' The example displays the following output:
'       Converted 0x80 to -128.
'       Converted 0xE293 to -7533.
'       Converted 0xF9A2FF to -417025.
'       Converted 0xFFFFFFFF to -1.
'       Converted 0x080 to 128.
'       Converted 0x0E293 to 58003.
'       Converted 0x0F9A2FF to 16360191.
'       Converted 0x0FFFFFFFF to 4294967295.
'       Converted 0x0080 to 128.
'       Converted 0x00E293 to 58003.
'       Converted 0x00F9A2FF to 16360191.
'       Converted 0x00FFFFFFFF to 4294967295.

Параметр value анализируется с помощью сведений о форматировании в объекте NumberFormatInfo , инициализированном для текущего системного языка и региональных параметров. Чтобы указать язык и региональные параметры, сведения о форматировании которых используются для операции синтаксического анализа, вызовите перегрузку Parse(String, NumberStyles, IFormatProvider) .

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

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

Parse(String, IFormatProvider)

Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs

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

public:
 static System::Numerics::BigInteger Parse(System::String ^ value, IFormatProvider ^ provider);
public:
 static System::Numerics::BigInteger Parse(System::String ^ value, IFormatProvider ^ provider) = IParsable<System::Numerics::BigInteger>::Parse;
public static System.Numerics.BigInteger Parse (string value, IFormatProvider provider);
public static System.Numerics.BigInteger Parse (string value, IFormatProvider? provider);
static member Parse : string * IFormatProvider -> System.Numerics.BigInteger
Public Shared Function Parse (value As String, provider As IFormatProvider) As BigInteger

Параметры

value
String

Строка, содержащая преобразуемое число.

provider
IFormatProvider

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

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

Значение, эквивалентное числу, которое задается параметром value.

Реализации

Исключения

value имеет значение null.

value имеет неправильный формат.

Примеры

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

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

public class BigIntegerFormatProvider : IFormatProvider
{
   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(NumberFormatInfo))
      {
         NumberFormatInfo numberFormat = new NumberFormatInfo();
         numberFormat.NegativeSign = "~";
         return numberFormat;
      }
      else
      {
         return null;
      }
   }
}
type BigIntegerFormatProvider() =
    interface IFormatProvider with

        member _.GetFormat(formatType: Type) =
            if formatType = typeof<NumberFormatInfo> then
                let numberFormat = NumberFormatInfo()
                numberFormat.NegativeSign <- "~"
                numberFormat
            else
                null
Public Class BigIntegerFormatProvider : Implements IFormatProvider
   Public Function GetFormat(formatType As Type) As Object _
                            Implements IFormatProvider.GetFormat
      If formatType Is GetType(NumberFormatInfo) Then
         Dim numberFormat As New NumberFormatInfo
         numberFormat.NegativeSign = "~"
         Return numberFormat
      Else
         Return Nothing
      End If      
   End Function
End Class

Затем BigInteger можно создать экземпляр объекта с помощью следующего кода:

BigInteger number = BigInteger.Parse("~6354129876", new BigIntegerFormatProvider());
// Display value using same formatting information
Console.WriteLine(number.ToString(new BigIntegerFormatProvider()));
// Display value using formatting of current culture
Console.WriteLine(number);
let number = BigInteger.Parse("~6354129876", BigIntegerFormatProvider())
printfn $"{number.ToString(BigIntegerFormatProvider())}"
printfn $"{number}"
Dim number As BigInteger = BigInteger.Parse("~6354129876", New BigIntegerFormatProvider)
' Display value using same formatting information
Console.WriteLine(number.ToString(New BigIntegerFormatProvider))
' Display value using formatting of current culture
Console.WriteLine(number)

Второй пример более прост. Он передает NumberFormatInfo объект, предоставляющий сведения о форматировании, в provider параметр .

NumberFormatInfo fmt = new NumberFormatInfo();
fmt.NegativeSign = "~";

BigInteger number = BigInteger.Parse("~6354129876", fmt);
// Display value using same formatting information
Console.WriteLine(number.ToString(fmt));
// Display value using formatting of current culture
Console.WriteLine(number);
let fmt = NumberFormatInfo()
fmt.NegativeSign <- "~"

let number = BigInteger.Parse("~6354129876", fmt)
printfn $"{number.ToString fmt}"
printfn $"{number}"
Dim fmt As New NumberFormatInfo()
fmt.NegativeSign = "~"

Dim number As BigInteger = BigInteger.Parse("~6354129876", fmt)
' Display value using same formatting information
Console.WriteLine(number.ToString(fmt))
' Display value using formatting of current culture
Console.WriteLine(number)

Комментарии

Параметр value должен представлять собой строковое представление числа в следующей форме:

[ws] [sign] digits[ws]

Элементы в квадратных скобках ([и]) являются необязательными. Каждый из элементов описан в таблице ниже.

Элемент Описание
ws Необязательный пробел.
sign Необязательный знак. Допустимые символы знака определяются свойствами NumberFormatInfo.NegativeSignNumberFormatInfo и NumberFormatInfo.PositiveSign объекта , возвращаемого методом provider объекта GetFormat .
digits Последовательность цифр в диапазоне от 0 до 9. Любые нули в начале игнорируются.

Примечание

Строка, указанная параметром value , интерпретируется с помощью NumberStyles.Integer стиля . Он не может содержать разделители групп или десятичный разделитель и не может содержать десятичную часть.

Важно!

Если метод используется Parse для кругового пути строкового BigInteger представления значения, которое было выведено методом ToString , следует использовать BigInteger.ToString(String) метод с описателем формата "R", чтобы создать строковое представление BigInteger значения. В противном случае строковое представление BigInteger сохраняет только 50 наиболее значимых цифр исходного значения, и данные могут быть потеряны при использовании Parse метода для восстановления BigInteger значения.

Параметр provider является реализацией, IFormatProvider метод которой GetFormat возвращает NumberFormatInfo объект , предоставляющий сведения о форматировании, относящиеся к языку и региональным параметрам. При вызове Parse(String, IFormatProvider) метода он вызывает provider метод параметра GetFormat и передает ему Type объект, представляющий NumberFormatInfo тип . Затем GetFormat метод возвращает NumberFormatInfo объект , предоставляющий сведения о формате value параметра . Существует три способа использования provider параметра для предоставления настраиваемых сведений о форматировании операции синтаксического анализа.

  • Можно передать CultureInfo объект , представляющий язык и региональные параметры, предоставляющие сведения о форматировании. Его GetFormat метод возвращает NumberFormatInfo объект , предоставляющий числовые сведения о форматировании для этого языка и региональных параметров.

  • Можно передать фактический NumberFormatInfo объект, предоставляющий числовые сведения о форматировании. (Его реализация GetFormat просто возвращает себя.)

  • Можно передать пользовательский объект, реализующий IFormatProvider. Его GetFormat метод создает экземпляр и возвращает NumberFormatInfo объект , предоставляющий сведения о форматировании.

Если provider имеет значение null, форматирование value интерпретируется на NumberFormatInfo основе объекта текущего языка и региональных параметров.

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

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

Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider)

Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs

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

public static System.Numerics.BigInteger Parse (ReadOnlySpan<char> value, System.Globalization.NumberStyles style = System.Globalization.NumberStyles.Integer, IFormatProvider? provider = default);
public static System.Numerics.BigInteger Parse (ReadOnlySpan<char> value, System.Globalization.NumberStyles style = System.Globalization.NumberStyles.Integer, IFormatProvider provider = default);
static member Parse : ReadOnlySpan<char> * System.Globalization.NumberStyles * IFormatProvider -> System.Numerics.BigInteger
Public Shared Function Parse (value As ReadOnlySpan(Of Char), Optional style As NumberStyles = System.Globalization.NumberStyles.Integer, Optional provider As IFormatProvider = Nothing) As BigInteger

Параметры

value
ReadOnlySpan<Char>

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

style
NumberStyles

Побитовое сочетание значений перечисления, которое показывает разрешенный формат параметра value.

provider
IFormatProvider

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

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

Значение, эквивалентное числу, которое задается параметром value.

Реализации

Исключения

style не является значением NumberStyles.

-или-

style включает флаги AllowHexSpecifier и HexNumber вместе с другим значениями.

value имеет значение null.

value не соответствует образцу ввода, заданному style.

Комментарии

Параметр style определяет элементы стиля (например, пробелы, символы положительного или отрицательного знака, символ разделителя групп или символ десятичной запятой), которые разрешены в value параметре для успешного выполнения операции синтаксического анализа. styles должен быть сочетанием битовых флагов из перечисления NumberStyles . Параметр style делает эту перегрузку метода полезной, если value содержит представление шестнадцатеричного значения, когда система чисел (десятичная или шестнадцатеричная), представленная value , известна только во время выполнения, или если требуется запретить пробелы или символ знака в value.

В зависимости от значения styleпараметр value может включать следующие элементы:

[ws] [$][знак][цифры,]digits[.fractional_digits][E[sign]exponential_digits][ws]

Если style параметр включает NumberStyles.AllowHexSpecifier, параметр value может включать следующие элементы:

[ws] hexdigits[ws]

Элементы в квадратных скобках ([и]) являются необязательными. Каждый из элементов описан в таблице ниже.

Элемент Описание
ws Необязательный пробел. Пробел может отображаться в начале value , если style включает NumberStyles.AllowLeadingWhite флаг, и в конце value , если style включает NumberStyles.AllowTrailingWhite флаг.
$ Символ валюты, зависящий от языка и региональных параметров. Его положение в value определяется свойствами NumberFormatInfo.CurrencyNegativePattern и языка и NumberFormatInfo.CurrencyPositivePattern региональных параметров, указанных параметром provider . Символ валюты текущего языка и региональных параметров может отображаться в value , если style включает NumberStyles.AllowCurrencySymbol флаг .
sign Необязательный знак. Знак может отображаться в начале value , если style включает NumberStyles.AllowLeadingSign флаг, и в конце value , если style включает NumberStyles.AllowTrailingSign флаг. Круглые скобки можно использовать в value , чтобы указать отрицательное значение, если style включает флаг NumberStyles.AllowParentheses .
digits

fractional_digits

exponential_digits
Последовательность цифр от 0 до 9. Для fractional_digits допустима только цифра 0.
, Символ разделителя групп, зависящий от языка и региональных параметров. Символ разделителя групп для языка и региональных параметров, заданных параметром , provider может отображаться в value , если style включает NumberStyles.AllowThousands флаг .
. Символ десятичной запятой для конкретного языка и региональных параметров. Символ десятичной запятой для языка и региональных параметров, обозначаемый параметром provider , может отображаться в value , если style включает флаг NumberStyles.AllowDecimalPoint . Только цифра 0 может отображаться в виде дробной цифры для успешной операции синтаксического анализа; Если fractional_digits включает любую другую цифру FormatException , возникает исключение .
E Символ "e" или "E", который указывает, что значение представлено в экспоненциальной (научной) нотации. Параметр value может представлять число в экспоненциальной нотации, если style включает флаг NumberStyles.AllowExponent .
hexdigits Последовательность шестнадцатеричных цифр от 0 до f или от 0 до F.

Примечание

Все завершающие символы NUL (U+0000) в s игнорируются операцией синтаксического анализа независимо от значения аргумента style .

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

Значение NumberStyles Элементы, разрешенные в значении в дополнение к цифрам
None Только элемент digits .
AllowDecimalPoint Элементы десятичной запятой (.) и дробными цифрами .
AllowExponent Символ "e" или "E", обозначающий экспоненциальную нотацию. вместе с exponential_digits.
AllowLeadingWhite Элемент ws в начале value.
AllowTrailingWhite Элемент ws в конце value.
AllowLeadingSign Элемент знака в начале value.
AllowTrailingSign Элемент знака в конце value.
AllowParentheses Элемент sign в виде круглых скобок, включающих числовое значение.
AllowThousands Элемент разделителя групп (,).
AllowCurrencySymbol Элемент currency ($).
Currency Все элементы. value Однако не может представлять шестнадцатеричное число или число в экспоненциальной нотации.
Float Элемент ws в начале или конце value, знак в начале valueи символ десятичной запятой (.). Параметр value также может использовать экспоненциальную нотацию.
Number Элементы ws, sign, разделитель групп (,) и десятичная запятая (.) .
Any Все элементы. value Однако не может представлять шестнадцатеричное число.

В отличие от других NumberStyles значений, которые допускают, но не требуют наличия определенных элементов стиля в value, NumberStyles.AllowHexSpecifier значение стиля означает, что отдельные числовые символы в value всегда интерпретируются как шестнадцатеричные символы. Допустимые шестнадцатеричные символы: 0–9, A–F и a–f. Единственными флагами, которые можно объединить с параметром style , являются NumberStyles.AllowLeadingWhite и NumberStyles.AllowTrailingWhite. (Перечисление NumberStyles включает в себя стиль составных чисел , HexNumberкоторый включает оба флага пробелов.)

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

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

  • Объект NumberFormatInfo , предоставляющий сведения о форматировании. (Его реализация GetFormat просто возвращает себя.)

  • Пользовательский объект, реализующий IFormatProvider и использующий GetFormat метод для создания экземпляра NumberFormatInfo и возврата объекта, предоставляющего сведения о форматировании.

Если provider имеет значение null, NumberFormatInfo используется объект для текущего языка и региональных параметров.

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

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

Parse(String, NumberStyles, IFormatProvider)

Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs

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

public:
 static System::Numerics::BigInteger Parse(System::String ^ value, System::Globalization::NumberStyles style, IFormatProvider ^ provider);
public:
 static System::Numerics::BigInteger Parse(System::String ^ value, System::Globalization::NumberStyles style, IFormatProvider ^ provider) = System::Numerics::INumberBase<System::Numerics::BigInteger>::Parse;
public static System.Numerics.BigInteger Parse (string value, System.Globalization.NumberStyles style, IFormatProvider provider);
public static System.Numerics.BigInteger Parse (string value, System.Globalization.NumberStyles style, IFormatProvider? provider);
static member Parse : string * System.Globalization.NumberStyles * IFormatProvider -> System.Numerics.BigInteger
Public Shared Function Parse (value As String, style As NumberStyles, provider As IFormatProvider) As BigInteger

Параметры

value
String

Строка, содержащая преобразуемое число.

style
NumberStyles

Побитовое сочетание значений перечисления, которое показывает разрешенный формат параметра value.

provider
IFormatProvider

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

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

Значение, эквивалентное числу, которое задается параметром value.

Реализации

Исключения

style не является значением NumberStyles.

-или-

style включает флаги AllowHexSpecifier и HexNumber вместе с другим значениями.

value имеет значение null.

value не соответствует образцу ввода, заданному style.

Примеры

В следующем примере выполняется Parse(String, NumberStyles, IFormatProvider) несколько вызовов метода , используя различные сочетания значений для style параметров и provider .

// Call parse with default values of style and provider
Console.WriteLine(BigInteger.Parse("  -300   ",
                  NumberStyles.Integer, CultureInfo.CurrentCulture));
// Call parse with default values of style and provider supporting tilde as negative sign
Console.WriteLine(BigInteger.Parse("   ~300  ",
                                   NumberStyles.Integer, new BigIntegerFormatProvider()));
// Call parse with only AllowLeadingWhite and AllowTrailingWhite
// Exception thrown because of presence of negative sign
try
{
   Console.WriteLine(BigInteger.Parse("    ~300   ",
                                NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite,
                                new BigIntegerFormatProvider()));
}
catch (FormatException e)
{
   Console.WriteLine("{0}: \n   {1}", e.GetType().Name, e.Message);
}
// Call parse with only AllowHexSpecifier
// Exception thrown because of presence of negative sign
try
{
   Console.WriteLine(BigInteger.Parse("-3af", NumberStyles.AllowHexSpecifier,
                                      new BigIntegerFormatProvider()));
}
catch (FormatException e)
{
   Console.WriteLine("{0}: \n   {1}", e.GetType().Name, e.Message);
}
// Call parse with only NumberStyles.None
// Exception thrown because of presence of white space and sign
try
{
   Console.WriteLine(BigInteger.Parse(" -300 ", NumberStyles.None,
                                      new BigIntegerFormatProvider()));
}
catch (FormatException e)
{
   Console.WriteLine("{0}: \n   {1}", e.GetType().Name, e.Message);
}
// The example displays the followingoutput:
//       -300
//       -300
//       FormatException:
//          The value could not be parsed.
//       FormatException:
//          The value could not be parsed.
//       FormatException:
//          The value could not be parsed.
    // Call parse with default values of style and provider
    printfn $"""{BigInteger.Parse("  -300   ", NumberStyles.Integer, CultureInfo.CurrentCulture)}"""

    // Call parse with default values of style and provider supporting tilde as negative sign
    printfn $"""{BigInteger.Parse("   ~300  ", NumberStyles.Integer, new BigIntegerFormatProvider())}"""

    // Call parse with only AllowLeadingWhite and AllowTrailingWhite
    // Exception thrown because of presence of negative sign
    try
        printfn
            $"""{BigInteger.Parse(
                     "    ~300   ",
                     NumberStyles.AllowLeadingWhite ||| NumberStyles.AllowTrailingWhite,
                     new BigIntegerFormatProvider()
                 )}"""
    with :? FormatException as e ->
        printfn $"{e.GetType().Name}: \n   {e.Message}"

    // Call parse with only AllowHexSpecifier
    // Exception thrown because of presence of negative sign
    try
        printfn $"""{BigInteger.Parse("-3af", NumberStyles.AllowHexSpecifier, new BigIntegerFormatProvider())}"""
    with :? FormatException as e ->
        printfn $"{e.GetType().Name}: \n   {e.Message}"

    // Call parse with only NumberStyles.None
    // Exception thrown because of presence of white space and sign
    try
        printfn $"""{BigInteger.Parse(" -300 ", NumberStyles.None, new BigIntegerFormatProvider())}"""
    with :? FormatException as e ->
        printfn $"{e.GetType().Name}: \n   {e.Message}"
// The example displays the followingoutput:
//       -300
//       -300
//       FormatException:
//          The value could not be parsed.
//       FormatException:
//          The value could not be parsed.
//       FormatException:
//          The value could not be parsed.
' Call parse with default values of style and provider
Console.WriteLine(BigInteger.Parse("  -300   ", _
                  NumberStyles.Integer, CultureInfo.CurrentCulture))
' Call parse with default values of style and provider supporting tilde as negative sign
Console.WriteLine(BigInteger.Parse("   ~300  ", _
                                   NumberStyles.Integer, New BigIntegerFormatProvider()))
' Call parse with only AllowLeadingWhite and AllowTrailingWhite
' Exception thrown because of presence of negative sign
Try
   Console.WriteLIne(BigInteger.Parse("    ~300   ", _
                                      NumberStyles.AllowLeadingWhite Or NumberStyles.AllowTrailingWhite, _
                                      New BigIntegerFormatProvider()))
Catch e As FormatException
   Console.WriteLine("{0}: {1}   {2}", e.GetType().Name, vbCrLf, e.Message)
End Try                                   
' Call parse with only AllowHexSpecifier
' Exception thrown because of presence of negative sign
Try
   Console.WriteLIne(BigInteger.Parse("-3af", NumberStyles.AllowHexSpecifier, _
                                      New BigIntegerFormatProvider()))
Catch e As FormatException
   Console.WriteLine("{0}: {1}   {2}", e.GetType().Name, vbCrLf, e.Message)
End Try                                 
' Call parse with only NumberStyles.None
' Exception thrown because of presence of white space and sign
Try
   Console.WriteLIne(BigInteger.Parse(" -300 ", NumberStyles.None, _
                                      New BigIntegerFormatProvider()))
Catch e As FormatException
   Console.WriteLine("{0}: {1}   {2}", e.GetType().Name, vbCrLf, e.Message)
End Try
' The example displays the following output:
'       -300
'       -300
'       FormatException:
'          The value could not be parsed.
'       FormatException:
'          The value could not be parsed.
'       FormatException:
'          The value could not be parsed.

Ряд отдельных вызовов Parse(String, NumberStyles, IFormatProvider) метода передает экземпляр следующего BigIntegerFormatProvider класса, который определяет тильду (~) в качестве отрицательного знака.

public class BigIntegerFormatProvider : IFormatProvider
{
   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(NumberFormatInfo))
      {
         NumberFormatInfo numberFormat = new NumberFormatInfo();
         numberFormat.NegativeSign = "~";
         return numberFormat;
      }
      else
      {
         return null;
      }
   }
}
type BigIntegerFormatProvider() =
    interface IFormatProvider with

        member _.GetFormat(formatType: Type) =
            if formatType = typeof<NumberFormatInfo> then
                let numberFormat = NumberFormatInfo()
                numberFormat.NegativeSign <- "~"
                numberFormat
            else
                null
Public Class BigIntegerFormatProvider : Implements IFormatProvider
   Public Function GetFormat(formatType As Type) As Object _
                            Implements IFormatProvider.GetFormat
      If formatType Is GetType(NumberFormatInfo) Then
         Dim numberFormat As New NumberFormatInfo
         numberFormat.NegativeSign = "~"
         Return numberFormat
      Else
         Return Nothing
      End If      
   End Function
End Class

Комментарии

Параметр style определяет элементы стиля (например, пробелы, символ положительного или отрицательного знака, символ разделителя группы или символ десятичной запятой), которые разрешены в value параметре для успешного выполнения операции синтаксического анализа. styles должен быть сочетанием битовых флагов из перечисления NumberStyles . Параметр style делает эту перегрузку метода полезной, если value содержит строковое представление шестнадцатеричного значения, когда система чисел (десятичная или шестнадцатеричная), представленная value , известна только во время выполнения или если требуется запретить пробел или символ знака в value.

В зависимости от значения styleпараметр value может включать следующие элементы:

[ws] [$][знак][цифры,]digits[.fractional_digits][E[sign]exponential_digits][ws]

Если style включает NumberStyles.AllowHexSpecifier, value параметр может включать следующие элементы:

[ws] hexdigits[ws]

Элементы в квадратных скобках ([и]) являются необязательными. Каждый из элементов описан в таблице ниже.

Элемент Описание
ws Необязательный пробел. Пробел может отображаться в начале value , если style включает NumberStyles.AllowLeadingWhite флаг, и в конце value , если style включает NumberStyles.AllowTrailingWhite флаг.
$ Символ валюты, зависящий от языка и региональных параметров. Его положение в строке определяется свойствами NumberFormatInfo.CurrencyNegativePattern и языка и NumberFormatInfo.CurrencyPositivePattern региональных параметров, указанных параметром provider . Символ валюты текущего языка и региональных параметров может отображаться в value , если style включает NumberStyles.AllowCurrencySymbol флаг .
sign Необязательный знак. Знак может отображаться в начале value , если style включает NumberStyles.AllowLeadingSign флаг, и в конце value , если style включает NumberStyles.AllowTrailingSign флаг. Круглые скобки можно использовать в value , чтобы указать отрицательное значение, если style включает флаг NumberStyles.AllowParentheses .
digits

fractional_digits

exponential_digits
Последовательность цифр от 0 до 9. Для fractional_digits допустима только цифра 0.
, Символ разделителя групп, относящихся к языку и региональным параметрам. Символ разделителя групп для языка и региональных параметров, заданных параметром , provider может отображаться в value , если style включает NumberStyles.AllowThousands флаг .
. Символ десятичной запятой для конкретного языка и региональных параметров. Символ десятичной запятой языка и региональных параметров, обозначенных параметром , provider может отображаться в , value если style включает флаг NumberStyles.AllowDecimalPoint . Только цифра 0 может отображаться в качестве дробной цифры для успешного выполнения операции синтаксического анализа; Если fractional_digits включает любую другую цифру FormatException , возникает исключение .
E Символ "e" или "E", который указывает, что значение представлено в экспоненциальной (научной) нотации. Параметр value может представлять число в экспоненциальной нотации, если style включает флаг NumberStyles.AllowExponent .
hexdigits Последовательность шестнадцатеричных цифр от 0 до f или от 0 до F.

Примечание

Все завершающие символы NUL (U+0000) в s игнорируются операцией синтаксического анализа независимо от значения аргумента style .

Строка только с цифрами (которая соответствует стилю NumberStyles.None ) всегда успешно анализируется. Большинство остальных элементов управляют элементами NumberStyles , которые могут присутствовать, но не обязательно должны присутствовать во входной строке. В следующей таблице показано, как отдельные NumberStyles элементы влияют на элементы, которые могут присутствовать в value.

Значение NumberStyles Элементы, допустимые в значении в дополнение к цифрам
None Только элемент digits .
AllowDecimalPoint Элементы десятичной запятой (.) и дробными цифрами .
AllowExponent Символ "e" или "E", указывающий экспоненциальную нотацию. вместе с exponential_digits.
AllowLeadingWhite Элемент ws в начале value.
AllowTrailingWhite Элемент ws в конце value.
AllowLeadingSign Элемент sign в начале value.
AllowTrailingSign Элемент sign в конце value.
AllowParentheses Элемент sign в виде круглых скобок, включающих числовое значение.
AllowThousands Элемент разделителя групп (,).
AllowCurrencySymbol Элемент currency ($).
Currency Все элементы. value Однако не может представлять шестнадцатеричное число или число в экспоненциальной нотации.
Float Элемент ws в начале или в конце value, знак в начале valueи символ десятичной запятой (.). Параметр value также может использовать экспоненциальную нотацию.
Number Элементы ws, sign, разделитель групп (,) и десятичная запятая (.) .
Any Все элементы. value Однако не может представлять шестнадцатеричное число.

Важно!

Если метод используется Parse для кругового пути строкового BigInteger представления значения, которое было выведено методом ToString , следует использовать BigInteger.ToString(String) метод с описателем формата "R", чтобы создать строковое представление BigInteger значения. В противном случае строковое представление BigInteger сохраняет только 50 наиболее значимых цифр исходного значения, и данные могут быть потеряны при использовании Parse метода для восстановления BigInteger значения.

В отличие от других NumberStyles значений, которые допускают, но не требуют наличия определенных элементов стиля в value, NumberStyles.AllowHexSpecifier значение стиля означает, что отдельные числовые символы в value всегда интерпретируются как шестнадцатеричные символы. Допустимые шестнадцатеричные символы: 0–9, A–F и a-f. Единственными другими флагами, которые можно объединить с параметром style , являются NumberStyles.AllowLeadingWhite и NumberStyles.AllowTrailingWhite. (Перечисление NumberStyles включает стиль составных чисел , HexNumberкоторый включает оба флага пробела.)

Примечание

Если value является строковым представлением шестнадцатеричного числа, ему не может предшествовать какое-либо украшение (например 0x , или &h), которое различает его как шестнадцатеричное число. Это приводит к сбою преобразования.

Если value является шестнадцатеричной строкой, метод интерпретирует value как отрицательное число, Parse(String, NumberStyles) хранящееся с помощью представления дополнения двух, если первые две шестнадцатеричные цифры больше или равны 0x80. Другими словами, метод интерпретирует бит верхнего порядка первого байта в value как бит знака. Чтобы убедиться, что шестнадцатеричная строка правильно интерпретируется как положительное число, первая цифра в value должна иметь нулевое значение. Например, метод интерпретирует 0x80 как отрицательное значение, но интерпретирует или 0x00800x080 как положительное значение. В следующем примере показана разница между шестнадцатеричными строками, представляющими отрицательные и положительные значения.

using System;
using System.Globalization;
using System.Numerics;

public class Example
{
   public static void Main()
   {
      string[] hexStrings = { "80", "E293", "F9A2FF", "FFFFFFFF",
                              "080", "0E293", "0F9A2FF", "0FFFFFFFF",
                              "0080", "00E293", "00F9A2FF", "00FFFFFFFF" };
      foreach (string hexString in hexStrings)
      {
         BigInteger number = BigInteger.Parse(hexString, NumberStyles.AllowHexSpecifier);
         Console.WriteLine("Converted 0x{0} to {1}.", hexString, number);
      }
   }
}
// The example displays the following output:
//       Converted 0x80 to -128.
//       Converted 0xE293 to -7533.
//       Converted 0xF9A2FF to -417025.
//       Converted 0xFFFFFFFF to -1.
//       Converted 0x080 to 128.
//       Converted 0x0E293 to 58003.
//       Converted 0x0F9A2FF to 16360191.
//       Converted 0x0FFFFFFFF to 4294967295.
//       Converted 0x0080 to 128.
//       Converted 0x00E293 to 58003.
//       Converted 0x00F9A2FF to 16360191.
//       Converted 0x00FFFFFFFF to 4294967295.
open System.Globalization
open System.Numerics

let hexStrings =
    [| "80"
       "E293"
       "F9A2FF"
       "FFFFFFFF"
       "080"
       "0E293"
       "0F9A2FF"
       "0FFFFFFFF"
       "0080"
       "00E293"
       "00F9A2FF"
       "00FFFFFFFF" |]

for hexString in hexStrings do
    let number = BigInteger.Parse(hexString, NumberStyles.AllowHexSpecifier)
    printfn $"Converted 0x{hexString} to {number:N0}."
// The example displays the following output:
//       Converted 0x80 to -128.
//       Converted 0xE293 to -7533.
//       Converted 0xF9A2FF to -417025.
//       Converted 0xFFFFFFFF to -1.
//       Converted 0x080 to 128.
//       Converted 0x0E293 to 58003.
//       Converted 0x0F9A2FF to 16360191.
//       Converted 0x0FFFFFFFF to 4294967295.
//       Converted 0x0080 to 128.
//       Converted 0x00E293 to 58003.
//       Converted 0x00F9A2FF to 16360191.
//       Converted 0x00FFFFFFFF to 4294967295.
Imports System.Globalization
Imports System.Numerics

Module Example
   Public Sub Main()
      Dim hexStrings() As String = { "80", "E293", "F9A2FF", "FFFFFFFF", 
                                     "080", "0E293", "0F9A2FF", "0FFFFFFFF",  
                                     "0080", "00E293", "00F9A2FF", "00FFFFFFFF" }
      For Each hexString As String In hexStrings
         Dim number As BigInteger = BigInteger.Parse(hexString, NumberStyles.AllowHexSpecifier)
         Console.WriteLine("Converted 0x{0} to {1}.", hexString, number)
      Next         
   End Sub
End Module
' The example displays the following output:
'       Converted 0x80 to -128.
'       Converted 0xE293 to -7533.
'       Converted 0xF9A2FF to -417025.
'       Converted 0xFFFFFFFF to -1.
'       Converted 0x080 to 128.
'       Converted 0x0E293 to 58003.
'       Converted 0x0F9A2FF to 16360191.
'       Converted 0x0FFFFFFFF to 4294967295.
'       Converted 0x0080 to 128.
'       Converted 0x00E293 to 58003.
'       Converted 0x00F9A2FF to 16360191.
'       Converted 0x00FFFFFFFF to 4294967295.

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

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

  • Объект NumberFormatInfo , предоставляющий сведения о форматировании. (Его реализация GetFormat просто возвращает себя.)

  • Пользовательский объект, реализующий IFormatProvider и использующий GetFormat метод для создания экземпляра NumberFormatInfo и возврата объекта, предоставляющего сведения о форматировании.

Если provider имеет значение null, NumberFormatInfo используется объект для текущего языка и региональных параметров.

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

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