Double.Parse Метод

Определение

Преобразует строковое представление числа в эквивалент числа с плавающей запятой двойной точности.

Перегрузки

Parse(String)

Преобразует строковое представление числа в эквивалент числа с плавающей запятой двойной точности.

Parse(ReadOnlySpan<Byte>, IFormatProvider)

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

Parse(ReadOnlySpan<Char>, IFormatProvider)

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

Parse(String, NumberStyles)

Преобразует строковое представление числа в указанном стиле в эквивалент числа с плавающей запятой двойной точности.

Parse(String, IFormatProvider)

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

Parse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider)

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

Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider)

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

Parse(String, NumberStyles, IFormatProvider)

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

Комментарии

В .NET Core 3.0 и более поздних версиях значения, которые слишком большие для представления, округляются до PositiveInfinity или NegativeInfinity, как это требуется спецификации IEEE 754. В предыдущих версиях, включая .NET Framework, анализ значения, которое было слишком большим для представления, привело к сбою.

Parse(String)

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

Преобразует строковое представление числа в эквивалент числа с плавающей запятой двойной точности.

public static double Parse (string s);

Параметры

s
String

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

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

Число с плавающей запятой двойной точности, эквивалентное числовым или символам, указанным в s.

Исключения

s не представляет число в допустимом формате.

Только .NET Framework и .NET Core 2.2 и более ранних версий: s представляет число, которое меньше Double.MinValue или больше Double.MaxValue.

Примеры

В следующем примере показано использование метода Parse(String).

public class Temperature {
    // Parses the temperature from a string in form
    // [ws][sign]digits['F|'C][ws]
    public static Temperature Parse(string s) {
        Temperature temp = new Temperature();

        if( s.TrimEnd(null).EndsWith("'F") ) {
            temp.Value = Double.Parse( s.Remove(s.LastIndexOf('\''), 2) );
        }
        else if( s.TrimEnd(null).EndsWith("'C") ) {
            temp.Celsius = Double.Parse( s.Remove(s.LastIndexOf('\''), 2) );
        }
        else {
            temp.Value = Double.Parse(s);
        }

        return temp;
    }

    // The value holder
    protected double m_value;

    public double Value {
        get {
            return m_value;
        }
        set {
            m_value = value;
        }
    }

    public double Celsius {
        get {
            return (m_value-32.0)/1.8;
        }
        set {
            m_value = 1.8*value+32.0;
        }
    }
}

Комментарии

В .NET Core 3.0 и более поздних версиях значения, которые слишком большие для представления, округляются до PositiveInfinity или NegativeInfinity, как это требуется спецификации IEEE 754. В предыдущих версиях, включая .NET Framework, анализ значения, которое было слишком большим для представления, привело к сбою.

Параметр s может содержать NumberFormatInfo.PositiveInfinitySymbolтекущего языка и региональных параметров, NumberFormatInfo.NegativeInfinitySymbol, NumberFormatInfo.NaNSymbolили строку формы:

[ws] [знак] [целозначные цифры[,]]целозначные цифры[.[дробные цифры]][E[знак]экспоненциальные цифры][ws]

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

Элемент Описание
ws Серия символов пробелов.
знак Символ отрицательного знака (-) или символ положительного знака (+). Можно использовать только ведущий знак.
целочисленные цифры Ряд цифр от 0 до 9, указывающий неотъемлемую часть числа. Запуски целочисленных цифр можно секционировать символом разделителя групп. Например, в некоторых языках и региональных параметров запятая (,) отделяет группы тысяч. Элемент целочисленных цифр может быть отсутствует, если строка содержит элемент дробных цифр.
, Символ разделителя тысяч, зависящих от языка и региональных параметров.
. Символ десятичной запятой для конкретного языка и региональных параметров.
дробные цифры Ряд цифр от 0 до 9, указывающий дробную часть числа.
E Символ e или E, указывающий, что значение представлено в экспоненциальной (научной) нотации.
экспоненциальные цифры Ряд цифр от 0 до 9, указывающий экспонент.

Параметр s интерпретируется с помощью сочетания флагов NumberStyles.Float и NumberStyles.AllowThousands. Это означает, что разрешены пробелы и тысячи разделителей, например, в то время как символы валюты не являются. Чтобы более точно контролировать, какие элементы стиля разрешены в s для успешной операции синтаксического анализа, вызовите метод Double.Parse(String, NumberStyles) или метод Double.Parse(String, NumberStyles, IFormatProvider).

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

Обычно, если передать метод Double.Parse строку, созданную путем вызова метода Double.ToString, возвращается исходное Double значение. Однако в .NET Framework и .NET Core 2.2 и более ранних версиях значения могут быть не равными из-за потери точности. Кроме того, попытка проанализировать строковое представление Double.MinValue или Double.MaxValue завершается ошибкой. В .NET Framework и .NET Core 2.2 и предыдущих версиях создается OverflowException. В следующем примере показана иллюстрация.

   string value;

   value = Double.MinValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine($"{value} is outside the range of the Double type.");
   }

   value = Double.MaxValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine($"{value} is outside the range of the Double type.");
   }

   // Format without the default precision.
   value = Double.MinValue.ToString("G17");
   try
   {
       Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException)
   {
      Console.WriteLine($"{value} is outside the range of the Double type.");
   }
// The example displays the following output:
//    -1.79769313486232E+308 is outside the range of the Double type.
//    1.79769313486232E+308 is outside the range of the Double type.
//    -1.79769313486232E+308

В .NET Framework и .NET Core 2.2 и более ранних версиях, если s выходит из диапазона типа данных Double, метод Parse(String) создает OverflowException.

В .NET Core 3.0 и более поздних версиях исключение не возникает, если s выходит за пределы диапазона типа данных Double. В большинстве случаев метод возвращает Double.PositiveInfinity или Double.NegativeInfinity. Однако существует небольшой набор значений, которые считаются ближе к максимальному или минимальному значению Double, чем к положительной или отрицательной бесконечности. В этих случаях метод возвращает Double.MaxValue или Double.MinValue.

Если разделитель обнаружен в параметре s во время операции синтаксического анализа, а применимые денежные или числовые разделители и разделители групп совпадают, операция синтаксического анализа предполагает, что разделитель является десятичным разделителем, а не разделителем групп. Дополнительные сведения о разделителях см. в разделе CurrencyDecimalSeparator, NumberDecimalSeparator, CurrencyGroupSeparatorи NumberGroupSeparator.

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

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

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Parse(ReadOnlySpan<Byte>, IFormatProvider)

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

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

public static double Parse (ReadOnlySpan<byte> utf8Text, IFormatProvider? provider);

Параметры

utf8Text
ReadOnlySpan<Byte>

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

provider
IFormatProvider

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

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

Результат синтаксического анализа utf8Text.

Реализации

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

.NET 9 и .NET 8
Продукт Версии
.NET 8, 9

Parse(ReadOnlySpan<Char>, IFormatProvider)

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

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

public static double Parse (ReadOnlySpan<char> s, IFormatProvider? provider);

Параметры

s
ReadOnlySpan<Char>

Диапазон символов для синтаксического анализа.

provider
IFormatProvider

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

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

Результат синтаксического анализа s.

Реализации

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

.NET 9 и другие версии
Продукт Версии
.NET 7, 8, 9

Parse(String, NumberStyles)

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

Преобразует строковое представление числа в указанном стиле в эквивалент числа с плавающей запятой двойной точности.

public static double Parse (string s, System.Globalization.NumberStyles style);

Параметры

s
String

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

style
NumberStyles

Побитовое сочетание значений перечисления, указывающее элементы стиля, которые могут присутствовать в s. Обычное значение, указываемое, — это сочетание Float в сочетании с AllowThousands.

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

Число с плавающей запятой двойной точности, эквивалентное числовым или символам, указанным в s.

Исключения

s не представляет число в допустимом формате.

Только .NET Framework и .NET Core 2.2 и более ранних версий: s представляет число, которое меньше Double.MinValue или больше Double.MaxValue.

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

-или-

style включает значение AllowHexSpecifier.

Примеры

В следующем примере метод Parse(String, NumberStyles) используется для анализа строковых представлений значений Double с помощью языка и региональных параметров en-US.

public static void Main()
{
   // Set current thread culture to en-US.
   Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");

   string value;
   NumberStyles styles;

   // Parse a string in exponential notation with only the AllowExponent flag.
   value = "-1.063E-02";
   styles = NumberStyles.AllowExponent;
   ShowNumericValue(value, styles);

   // Parse a string in exponential notation
   // with the AllowExponent and Number flags.
   styles = NumberStyles.AllowExponent | NumberStyles.Number;
   ShowNumericValue(value, styles);

   // Parse a currency value with leading and trailing white space, and
   // white space after the U.S. currency symbol.
   value = " $ 6,164.3299  ";
   styles = NumberStyles.Number | NumberStyles.AllowCurrencySymbol;
   ShowNumericValue(value, styles);

   // Parse negative value with thousands separator and decimal.
   value = "(4,320.64)";
   styles = NumberStyles.AllowParentheses | NumberStyles.AllowTrailingSign |
            NumberStyles.Float;
   ShowNumericValue(value, styles);

   styles = NumberStyles.AllowParentheses | NumberStyles.AllowTrailingSign |
            NumberStyles.Float | NumberStyles.AllowThousands;
   ShowNumericValue(value, styles);
}

private static void ShowNumericValue(string value, NumberStyles styles)
{
   double number;
   try
   {
      number = Double.Parse(value, styles);
      Console.WriteLine("Converted '{0}' using {1} to {2}.",
                        value, styles.ToString(), number);
   }
   catch (FormatException)
   {
      Console.WriteLine("Unable to parse '{0}' with styles {1}.",
                        value, styles.ToString());
   }
   Console.WriteLine();
}
// The example displays the following output to the console:
//    Unable to parse '-1.063E-02' with styles AllowExponent.
//
//    Converted '-1.063E-02' using AllowTrailingSign, AllowThousands, Float to -0.01063.
//
//    Converted ' $ 6,164.3299  ' using Number, AllowCurrencySymbol to 6164.3299.
//
//    Unable to parse '(4,320.64)' with styles AllowTrailingSign, AllowParentheses, Float.
//
//    Converted '(4,320.64)' using AllowTrailingSign, AllowParentheses, AllowThousands, Float to -4320.64.

Комментарии

В .NET Core 3.0 и более поздних версиях значения, которые слишком большие для представления, округляются до PositiveInfinity или NegativeInfinity, как это требуется спецификации IEEE 754. В предыдущих версиях, включая .NET Framework, анализ значения, которое было слишком большим для представления, привело к сбою.

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

Параметр s может содержать NumberFormatInfo.PositiveInfinitySymbolтекущего языка и региональных параметров, NumberFormatInfo.NegativeInfinitySymbolили NumberFormatInfo.NaNSymbol. В зависимости от значения styleон также может принимать форму:

[ws] [$] [знак] [целозначные цифры[,]]целозначные цифры[.[дробные цифры]][E[знак]экспоненциальные цифры][ws]

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

Элемент Описание
ws Серия символов пробелов. Пробел может отображаться в начале s, если style включает флаг NumberStyles.AllowLeadingWhite, и он может отображаться в конце s, если style включает флаг NumberStyles.AllowTrailingWhite.
$ Символ валюты, зависящий от языка и региональных параметров. Его положение в строке определяется NumberFormatInfo.CurrencyNegativePattern и NumberFormatInfo.CurrencyPositivePattern свойствами текущего языка и региональных параметров. Символ валюты текущего языка и региональных параметров может отображаться в s, если style включает флаг NumberStyles.AllowCurrencySymbol.
знак Символ отрицательного знака (-) или символ положительного знака (+). Знак может появиться в начале s, если style включает флаг NumberStyles.AllowLeadingSign, и он может отображаться в конце s, если style включает флаг NumberStyles.AllowTrailingSign. Скобки можно использовать в s, чтобы указать отрицательное значение, если style включает флаг NumberStyles.AllowParentheses.
целочисленные цифры Ряд цифр от 0 до 9, указывающий неотъемлемую часть числа. Элемент целочисленных цифр может быть отсутствует, если строка содержит элемент дробных цифр.
, Разделитель групп, зависящий от языка и региональных параметров. Символ разделителя групп текущего языка и региональных параметров может отображаться в s, если style включает флаг NumberStyles.AllowThousands
. Символ десятичной запятой для конкретного языка и региональных параметров. Символ десятичной запятой текущего языка и региональных параметров может отображаться в s, если style включает флаг NumberStyles.AllowDecimalPoint.
дробные цифры Ряд цифр от 0 до 9, указывающий дробную часть числа. Дробные цифры могут отображаться в s, если style включает флаг NumberStyles.AllowDecimalPoint.
E Символ e или E, указывающий, что значение представлено в экспоненциальной (научной) нотации. Параметр s может представлять число в экспоненциальной нотации, если style включает флаг NumberStyles.AllowExponent.
экспоненциальные цифры Ряд цифр от 0 до 9, указывающий экспонент.

Примечание

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

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

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

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

Обычно, если передать метод Double.Parse строку, созданную путем вызова метода Double.ToString, возвращается исходное Double значение. Однако из-за потери точности значения не могут быть равными. Кроме того, попытка проанализировать строковое представление Double.MinValue или Double.MaxValue завершается ошибкой. В .NET Framework и .NET Core 2.2 и предыдущих версиях создается OverflowException. В .NET Core 3.0 и более поздних версиях возвращается Double.NegativeInfinity при попытке синтаксического анализа MinValue или Double.PositiveInfinity при попытке синтаксического анализа MaxValue. В следующем примере показана иллюстрация.

   string value;

   value = Double.MinValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine($"{value} is outside the range of the Double type.");
   }

   value = Double.MaxValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine($"{value} is outside the range of the Double type.");
   }

   // Format without the default precision.
   value = Double.MinValue.ToString("G17");
   try
   {
       Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException)
   {
      Console.WriteLine($"{value} is outside the range of the Double type.");
   }
// The example displays the following output:
//    -1.79769313486232E+308 is outside the range of the Double type.
//    1.79769313486232E+308 is outside the range of the Double type.
//    -1.79769313486232E+308

В .NET Framework и .NET Core 2.2 и более ранних версиях, если s выходит из диапазона типа данных Double, метод Parse(String, NumberStyles) создает OverflowException.

В .NET Core 3.0 и более поздних версиях исключение не возникает, если s выходит за пределы диапазона типа данных Double. В большинстве случаев метод Parse(String, NumberStyles) возвращает Double.PositiveInfinity или Double.NegativeInfinity. Однако существует небольшой набор значений, которые считаются ближе к максимальному или минимальному значению Double, чем к положительной или отрицательной бесконечности. В этих случаях метод возвращает Double.MaxValue или Double.MinValue.

Если разделитель обнаружен в параметре s во время операции синтаксического анализа, а применимые денежные или числовые разделители и разделители групп совпадают, операция синтаксического анализа предполагает, что разделитель является десятичным разделителем, а не разделителем групп. Дополнительные сведения о разделителях см. в разделе CurrencyDecimalSeparator, NumberDecimalSeparator, CurrencyGroupSeparatorи NumberGroupSeparator.

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

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

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Parse(String, IFormatProvider)

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

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

public static double Parse (string s, IFormatProvider provider);
public static double Parse (string s, IFormatProvider? provider);

Параметры

s
String

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

provider
IFormatProvider

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

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

Число с плавающей запятой двойной точности, эквивалентное числовым или символам, указанным в s.

Реализации

Исключения

s не представляет число в допустимом формате.

Только .NET Framework и .NET Core 2.2 и более ранних версий: s представляет число, которое меньше Double.MinValue или больше Double.MaxValue.

Примеры

В следующем примере показан обработчик событий нажатия кнопки веб-формы. Он использует массив, возвращаемый свойством HttpRequest.UserLanguages, для определения языкового стандарта пользователя. Затем он создает экземпляр объекта CultureInfo, соответствующего соответствующему языковому стандарту. Затем объект NumberFormatInfo, принадлежащий к объекту CultureInfo, передается методу Parse(String, IFormatProvider) для преобразования входных данных пользователя в значение Double.

protected void OkToDouble_Click(object sender, EventArgs e)
{
    string locale;
    double number;
    CultureInfo culture;

    // Return if string is empty
    if (String.IsNullOrEmpty(this.inputNumber.Text))
        return;

    // Get locale of web request to determine possible format of number
    if (Request.UserLanguages.Length == 0)
        return;
    locale = Request.UserLanguages[0];
    if (String.IsNullOrEmpty(locale))
        return;

    // Instantiate CultureInfo object for the user's locale
    culture = new CultureInfo(locale);

    // Convert user input from a string to a number
    try
    {
        number = Double.Parse(this.inputNumber.Text, culture.NumberFormat);
    }
    catch (FormatException)
    {
        return;
    }
    catch (OverflowException)
    {
        return;
    }
    // Output number to label on web form
    this.outputNumber.Text = "Number is " + number.ToString();
}

Комментарии

В .NET Core 3.0 и более поздних версиях значения, которые слишком большие для представления, округляются до PositiveInfinity или NegativeInfinity, как это требуется спецификации IEEE 754. В предыдущих версиях, включая .NET Framework, анализ значения, которое было слишком большим для представления, привело к сбою.

Эта перегрузка метода Parse(String, IFormatProvider) обычно используется для преобразования текста, который можно отформатировать различными способами в значение Double. Например, его можно использовать для преобразования текста, введенного пользователем в текстовое поле HTML, в числовое значение.

Параметр s интерпретируется с помощью сочетания флагов NumberStyles.Float и NumberStyles.AllowThousands. Параметр s может содержать NumberFormatInfo.PositiveInfinitySymbol, NumberFormatInfo.NegativeInfinitySymbolили NumberFormatInfo.NaNSymbol для языка и региональных параметров, указанных provider, или содержать строку формы:

[ws] [знак]целозначные цифры[.[дробные цифры]][E[знак]экспоненциальные цифры][ws]

Необязательные элементы обрамляются квадратными скобками ([ и ]). Элементы, содержащие термин "цифры", состоят из ряда числовых символов от 0 до 9.

Элемент Описание
ws Серия символов пробелов.
знак Символ отрицательного знака (-) или символ положительного знака (+).
целочисленные цифры Ряд цифр от 0 до 9, указывающий неотъемлемую часть числа. Запуски целочисленных цифр можно секционировать символом разделителя групп. Например, в некоторых языках и региональных параметров запятая (,) отделяет группы тысяч. Элемент целочисленных цифр может быть отсутствует, если строка содержит элемент дробных цифр.
. Символ десятичной запятой для конкретного языка и региональных параметров.
дробные цифры Ряд цифр от 0 до 9, указывающий дробную часть числа.
E Символ e или E, указывающий, что значение представлено в экспоненциальной (научной) нотации.
экспоненциальные цифры Ряд цифр от 0 до 9, указывающий экспонент.

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

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

Обычно, если передать метод Double.Parse строку, созданную путем вызова метода Double.ToString, возвращается исходное Double значение. Однако из-за потери точности значения не могут быть равными. Кроме того, попытка проанализировать строковое представление Double.MinValue или Double.MaxValue завершается ошибкой. В .NET Framework и .NET Core 2.2 и предыдущих версиях создается OverflowException. В .NET Core 3.0 и более поздних версиях возвращается Double.NegativeInfinity при попытке синтаксического анализа MinValue или Double.PositiveInfinity при попытке синтаксического анализа MaxValue. В следующем примере показана иллюстрация.

   string value;

   value = Double.MinValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine($"{value} is outside the range of the Double type.");
   }

   value = Double.MaxValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine($"{value} is outside the range of the Double type.");
   }

   // Format without the default precision.
   value = Double.MinValue.ToString("G17");
   try
   {
       Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException)
   {
      Console.WriteLine($"{value} is outside the range of the Double type.");
   }
// The example displays the following output:
//    -1.79769313486232E+308 is outside the range of the Double type.
//    1.79769313486232E+308 is outside the range of the Double type.
//    -1.79769313486232E+308

В .NET Framework и .NET Core 2.2 и более ранних версиях, если s выходит из диапазона типа данных Double, метод Parse(String, IFormatProvider) создает OverflowException.

В .NET Core 3.0 и более поздних версиях исключение не возникает, если s выходит за пределы диапазона типа данных Double. В большинстве случаев метод Parse(String, IFormatProvider) возвращает Double.PositiveInfinity или Double.NegativeInfinity. Однако существует небольшой набор значений, которые считаются ближе к максимальному или минимальному значению Double, чем к положительной или отрицательной бесконечности. В этих случаях метод возвращает Double.MaxValue или Double.MinValue.

Если разделитель обнаружен в параметре s во время операции синтаксического анализа, а применимые денежные или числовые разделители и разделители групп совпадают, операция синтаксического анализа предполагает, что разделитель является десятичным разделителем, а не разделителем групп. Дополнительные сведения о разделителях см. в разделе CurrencyDecimalSeparator, NumberDecimalSeparator, CurrencyGroupSeparatorи NumberGroupSeparator.

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

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

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Parse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider)

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

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

public static double Parse (ReadOnlySpan<byte> utf8Text, System.Globalization.NumberStyles style = System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, IFormatProvider? provider = default);

Параметры

utf8Text
ReadOnlySpan<Byte>

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

style
NumberStyles

Побитовое сочетание стилей чисел, которые могут присутствовать в utf8Text.

provider
IFormatProvider

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

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

Результат синтаксического анализа utf8Text.

Реализации

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

.NET 9 и .NET 8
Продукт Версии
.NET 8, 9

Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider)

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

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

public static double Parse (ReadOnlySpan<char> s, System.Globalization.NumberStyles style = System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, IFormatProvider? provider = default);
public static double Parse (ReadOnlySpan<char> s, System.Globalization.NumberStyles style = System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, IFormatProvider provider = default);

Параметры

s
ReadOnlySpan<Char>

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

style
NumberStyles

Побитовое сочетание значений перечисления, указывающее элементы стиля, которые могут присутствовать в s. Обычное значение, указываемое, Float в сочетании с AllowThousands.

provider
IFormatProvider

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

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

Число с плавающей запятой двойной точности, эквивалентное числовым или символам, указанным в s.

Реализации

Исключения

s не представляет числовое значение.

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

-или-

style — это значение AllowHexSpecifier.

Комментарии

В .NET Core 3.0 и более поздних версиях значения, которые слишком большие для представления, округляются до PositiveInfinity или NegativeInfinity, как это требуется спецификации IEEE 754. В предыдущих версиях, включая .NET Framework, анализ значения, которое было слишком большим для представления, привело к сбою.

Если s выходит за пределы диапазона типа данных Double, метод возвращает Double.NegativeInfinity, если s меньше Double.MinValue и Double.PositiveInfinity, если s больше Double.MaxValue.

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

.NET 9 и другие версии
Продукт Версии
.NET Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

Parse(String, NumberStyles, IFormatProvider)

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

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

public static double Parse (string s, System.Globalization.NumberStyles style, IFormatProvider provider);
public static double Parse (string s, System.Globalization.NumberStyles style, IFormatProvider? provider);

Параметры

s
String

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

style
NumberStyles

Побитовое сочетание значений перечисления, указывающее элементы стиля, которые могут присутствовать в s. Обычное значение, указываемое, Float в сочетании с AllowThousands.

provider
IFormatProvider

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

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

Число с плавающей запятой двойной точности, эквивалентное числовым или символам, указанным в s.

Реализации

Исключения

s не представляет числовое значение.

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

-или-

style — это значение AllowHexSpecifier.

Только .NET Framework и .NET Core 2.2 и более ранних версий: s представляет число, которое меньше Double.MinValue или больше Double.MaxValue.

Примеры

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

using System;
using System.Globalization;

public class Temperature
{
   // Parses the temperature from a string. Temperature scale is
   // indicated by 'F (for Fahrenheit) or 'C (for Celsius) at the end
   // of the string.
   public static Temperature Parse(string s, NumberStyles styles,
                                   IFormatProvider provider)
   {
      Temperature temp = new Temperature();

      if (s.TrimEnd(null).EndsWith("'F"))
      {
         temp.Value = Double.Parse(s.Remove(s.LastIndexOf((char)39), 2),
                                   styles, provider);
      }
      else
      {
         if (s.TrimEnd(null).EndsWith("'C"))
            temp.Celsius = Double.Parse(s.Remove(s.LastIndexOf((char)39), 2),
                                        styles, provider);
         else
            temp.Value = Double.Parse(s, styles, provider);
      }
      return temp;
   }

   // Declare private constructor so Temperature so only Parse method can
   // create a new instance
   private Temperature()   {}

   protected double m_value;

   public double Value
   {
      get { return m_value; }
      private set { m_value = value; }
   }

   public double Celsius
   {
      get { return (m_value - 32) / 1.8; }
      private set { m_value = value * 1.8 + 32; }
   }

   public double Fahrenheit
   {
      get {return m_value; }
   }
}

public class TestTemperature
{
   public static void Main()
   {
      string value;
      NumberStyles styles;
      IFormatProvider provider;
      Temperature temp;

      value = "25,3'C";
      styles = NumberStyles.Float;
      provider = CultureInfo.CreateSpecificCulture("fr-FR");
      temp = Temperature.Parse(value, styles, provider);
      Console.WriteLine("{0} degrees Fahrenheit equals {1} degrees Celsius.",
                        temp.Fahrenheit, temp.Celsius);

      value = " (40) 'C";
      styles = NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite
               | NumberStyles.AllowParentheses;
      provider = NumberFormatInfo.InvariantInfo;
      temp = Temperature.Parse(value, styles, provider);
      Console.WriteLine("{0} degrees Fahrenheit equals {1} degrees Celsius.",
                        temp.Fahrenheit, temp.Celsius);

      value = "5,778E03'C";      // Approximate surface temperature of the Sun
      styles = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands |
               NumberStyles.AllowExponent;
      provider = CultureInfo.CreateSpecificCulture("en-GB");
      temp = Temperature.Parse(value, styles, provider);
      Console.WriteLine("{0} degrees Fahrenheit equals {1} degrees Celsius.",
                        temp.Fahrenheit.ToString("N"), temp.Celsius.ToString("N"));
   }
}

Комментарии

В .NET Core 3.0 и более поздних версиях значения, которые слишком большие для представления, округляются до PositiveInfinity или NegativeInfinity, как это требуется спецификации IEEE 754. В предыдущих версиях, включая .NET Framework, анализ значения, которое было слишком большим для представления, привело к сбою.

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

Параметр s может содержать NumberFormatInfo.PositiveInfinitySymbol, NumberFormatInfo.NegativeInfinitySymbolили NumberFormatInfo.NaNSymbol для языка и региональных параметров, указанных provider. В зависимости от значения styleон также может принимать форму:

[ws] [$] [знак] [целочисленные цифры;]]целочисленные цифры[.[дробные цифры]][E[знак]экспоненциальные цифры][ws]

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

Элемент Описание
ws Серия символов пробелов. Пробел может отображаться в начале s, если style включает флаг NumberStyles.AllowLeadingWhite, и он может отображаться в конце s, если style включает флаг NumberStyles.AllowTrailingWhite.
$ Символ валюты, зависящий от языка и региональных параметров. Его положение в строке определяется NumberFormatInfo.CurrencyNegativePattern и NumberFormatInfo.CurrencyPositivePattern свойствами текущего языка и региональных параметров. Символ валюты текущего языка и региональных параметров может отображаться в s, если style включает флаг NumberStyles.AllowCurrencySymbol.
знак Символ отрицательного знака (-) или символ положительного знака (+). Знак может появиться в начале s, если style включает флаг NumberStyles.AllowLeadingSign, и он может отображаться в конце s, если style включает флаг NumberStyles.AllowTrailingSign. Скобки можно использовать в s, чтобы указать отрицательное значение, если style включает флаг NumberStyles.AllowParentheses.
целочисленные цифры Ряд цифр от 0 до 9, указывающий неотъемлемую часть числа. Элемент целочисленных цифр может быть отсутствует, если строка содержит элемент дробных цифр.
, Разделитель групп, зависящий от языка и региональных параметров. Символ разделителя групп текущего языка и региональных параметров может отображаться в s, если style включает флаг NumberStyles.AllowThousands
. Символ десятичной запятой для конкретного языка и региональных параметров. Символ десятичной запятой текущего языка и региональных параметров может отображаться в s, если style включает флаг NumberStyles.AllowDecimalPoint.
дробные цифры Ряд цифр от 0 до 9, указывающий дробную часть числа. Дробные цифры могут отображаться в s, если style включает флаг NumberStyles.AllowDecimalPoint.
E Символ e или E, указывающий, что значение представлено в экспоненциальной (научной) нотации. Параметр s может представлять число в экспоненциальной нотации, если style включает флаг NumberStyles.AllowExponent.
экспоненциальные цифры Ряд цифр от 0 до 9, указывающий экспонент.

Примечание

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

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

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

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

Обычно, если передать метод Double.Parse строку, созданную путем вызова метода Double.ToString, возвращается исходное Double значение. Однако из-за потери точности значения не могут быть равными. Кроме того, попытка проанализировать строковое представление MinValue или Double.MaxValue завершается ошибкой. В .NET Framework и .NET Core 2.2 и предыдущих версиях создается OverflowException. В .NET Core 3.0 и более поздних версиях возвращается Double.NegativeInfinity при попытке синтаксического анализа MinValue или Double.PositiveInfinity при попытке синтаксического анализа MaxValue. В следующем примере показана иллюстрация.

   string value;

   value = Double.MinValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine($"{value} is outside the range of the Double type.");
   }

   value = Double.MaxValue.ToString();
   try {
      Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException) {
      Console.WriteLine($"{value} is outside the range of the Double type.");
   }

   // Format without the default precision.
   value = Double.MinValue.ToString("G17");
   try
   {
       Console.WriteLine(Double.Parse(value));
   }
   catch (OverflowException)
   {
      Console.WriteLine($"{value} is outside the range of the Double type.");
   }
// The example displays the following output:
//    -1.79769313486232E+308 is outside the range of the Double type.
//    1.79769313486232E+308 is outside the range of the Double type.
//    -1.79769313486232E+308

В .NET Framework и .NET Core 2.2 и более ранних версиях, если s выходит из диапазона типа данных Double, метод Parse(String, NumberStyles, IFormatProvider) создает OverflowException.

В .NET Core 3.0 и более поздних версиях исключение не возникает, если s выходит за пределы диапазона типа данных Double. В большинстве случаев метод Parse(String, NumberStyles, IFormatProvider) возвращает Double.PositiveInfinity или Double.NegativeInfinity. Однако существует небольшой набор значений, которые считаются ближе к максимальному или минимальному значению Double, чем к положительной или отрицательной бесконечности. В этих случаях метод возвращает Double.MaxValue или Double.MinValue.

Если разделитель обнаружен в параметре s во время операции синтаксического анализа, а применимые денежные или числовые разделители и разделители групп совпадают, операция синтаксического анализа предполагает, что разделитель является десятичным разделителем, а не разделителем групп. Дополнительные сведения о разделителях см. в разделе CurrencyDecimalSeparator, NumberDecimalSeparator, CurrencyGroupSeparatorи NumberGroupSeparator.

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

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

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0