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


Double.TryParse Метод

Определение

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

Перегрузки

TryParse(String, IFormatProvider, Double)

Пытается проанализировать строку в значение.

TryParse(ReadOnlySpan<Char>, Double)

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

TryParse(String, Double)

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

TryParse(ReadOnlySpan<Byte>, IFormatProvider, Double)

Пытается проанализировать диапазон символов UTF-8 в значение.

TryParse(ReadOnlySpan<Char>, IFormatProvider, Double)

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

TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Double)

Пытается проанализировать диапазон символов UTF-8 в значение.

TryParse(ReadOnlySpan<Byte>, Double)

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

TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Double)

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

TryParse(String, NumberStyles, IFormatProvider, Double)

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

Комментарии

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

TryParse(String, IFormatProvider, Double)

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

Пытается проанализировать строку в значение.

public:
 static bool TryParse(System::String ^ s, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result) = IParsable<double>::TryParse;
public static bool TryParse (string? s, IFormatProvider? provider, out double result);
static member TryParse : string * IFormatProvider * double -> bool
Public Shared Function TryParse (s As String, provider As IFormatProvider, ByRef result As Double) As Boolean

Параметры

s
String

Строка для синтаксического анализа.

provider
IFormatProvider

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

result
Double

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

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

true, если s был успешно проанализирован; в противном случае false.

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

TryParse(ReadOnlySpan<Char>, Double)

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

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

public:
 static bool TryParse(ReadOnlySpan<char> s, [Runtime::InteropServices::Out] double % result);
public static bool TryParse (ReadOnlySpan<char> s, out double result);
static member TryParse : ReadOnlySpan<char> * double -> bool
Public Shared Function TryParse (s As ReadOnlySpan(Of Char), ByRef result As Double) As Boolean

Параметры

s
ReadOnlySpan<Char>

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

result
Double

При возврате этого метода содержит число с плавающей запятой двойной точности, эквивалентное числового значения или символа, содержащегося в параметре s, если преобразование выполнено успешно, или ноль, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр snull или пуст. Если s является допустимым числом меньше Double.MinValue, resultNegativeInfinity. Если s является допустимым числом, превышающим Double.MaxValue, resultPositiveInfinity. Этот параметр передается неинициализирован; любое исходное значение, предоставленное в result, будет перезаписан.

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

true, если s был успешно преобразован; в противном случае false.

Комментарии

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

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

TryParse(String, Double)

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

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

public:
 static bool TryParse(System::String ^ s, [Runtime::InteropServices::Out] double % result);
public static bool TryParse (string s, out double result);
public static bool TryParse (string? s, out double result);
static member TryParse : string * double -> bool
Public Shared Function TryParse (s As String, ByRef result As Double) As Boolean

Параметры

s
String

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

result
Double

При возврате этого метода содержит число с плавающей запятой двойной точности, эквивалентное параметру s, если преобразование выполнено успешно, или ноль, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр snull или Empty или не является числом в допустимом формате. Он также завершается ошибкой в .NET Framework и .NET Core 2.2 и более ранних версиях, если s представляет число меньше Double.MinValue или больше Double.MaxValue. Этот параметр передается неинициализирован; любое исходное значение, предоставленное в result, будет перезаписан.

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

true, если s был успешно преобразован; в противном случае false.

Примеры

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

using System;

public class Example
{
   public static void Main()
   {
      string[] values = { "1,643.57", "$1,643.57", "-1.643e6",
                          "-168934617882109132", "123AE6",
                          null, String.Empty, "ABCDEF" };
      double number;

      foreach (var value in values) {
         if (Double.TryParse(value, out number))
            Console.WriteLine("'{0}' --> {1}", value, number);
         else
            Console.WriteLine("Unable to parse '{0}'.", value);
      }
   }
}
// The example displays the following output:
//       '1,643.57' --> 1643.57
//       Unable to parse '$1,643.57'.
//       '-1.643e6' --> -1643000
//       '-168934617882109132' --> -1.68934617882109E+17
//       Unable to parse '123AE6'.
//       Unable to parse ''.
//       Unable to parse ''.
//       Unable to parse 'ABCDEF'.
open System

let values =
    [| "1,643.57"; "$1,643.57"; "-1.643e6"
       "-168934617882109132"; "123AE6"
       null; String.Empty; "ABCDEF" |]

for value in values do
    match Double.TryParse value with
    | true, number ->
        printfn $"'{value}' --> {number}"
    | _ ->
        printfn $"Unable to parse '{value}'."
// The example displays the following output:
//       '1,643.57' --> 1643.57
//       Unable to parse '$1,643.57'.
//       '-1.643e6' --> -1643000
//       '-168934617882109132' --> -1.68934617882109E+17
//       Unable to parse '123AE6'.
//       Unable to parse ''.
//       Unable to parse ''.
//       Unable to parse 'ABCDEF'.
Module Example
   Public Sub Main()
      Dim values() As String = { "1,643.57", "$1,643.57", "-1.643e6", 
                                "-168934617882109132", "123AE6", 
                                Nothing, String.Empty, "ABCDEF" }
      Dim number As Double
      
      For Each value In values
         If Double.TryParse(value, number) Then
            Console.WriteLine("'{0}' --> {1}", value, number)
         Else
            Console.WriteLine("Unable to parse '{0}'.", value)      
         End If   
      Next   
   End Sub
End Module
' The example displays the following output:
'       '1,643.57' --> 1643.57
'       Unable to parse '$1,643.57'.
'       '-1.643e6' --> -1643000
'       '-168934617882109132' --> -1.68934617882109E+17
'       Unable to parse '123AE6'.
'       Unable to parse ''.
'       Unable to parse ''.
'       Unable to parse 'ABCDEF'.

Комментарии

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

Эта перегрузка отличается от метода Double.Parse(String) путем возврата логического значения, указывающего, выполнена ли операция синтаксического анализа вместо возврата числового значения синтаксического анализа. Это устраняет необходимость использовать обработку исключений для проверки FormatException в случае, если s является недопустимым и не может быть успешно проанализирован.

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

[ws] [знак] [целочисленные цифры,]целочисленные цифры[.[ fractional-digits][e[sign]exponential-digits][ws]

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

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

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

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

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

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

using System;

public class Example
{
   public static void Main()
   {
      string value;
      double number;

      value = Double.MinValue.ToString();
      if (Double.TryParse(value, out number))
         Console.WriteLine(number);
      else
         Console.WriteLine("{0} is outside the range of a Double.",
                           value);

      value = Double.MaxValue.ToString();
      if (Double.TryParse(value, out number))
         Console.WriteLine(number);
      else
         Console.WriteLine("{0} is outside the range of a Double.",
                           value);
   }
}
// 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.
open System

[<EntryPoint>]
let main _ = 
    let value = string Double.MinValue
    match Double.TryParse value with
    | true, number ->
        printfn $"{number}"
    | _ ->
        printfn $"{value} is outside the range of a Double."

    let value = string Double.MaxValue
    match Double.TryParse value with
    | true, number ->
        printfn $"{number}"
    | _ ->
        printfn $"{value} is outside the range of a Double."

    0
// 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.
Module Example
   Public Sub Main()
      Dim value As String
      Dim number As Double
      
      value = Double.MinValue.ToString()
      If Double.TryParse(value, number) Then
         Console.WriteLine(number)
      Else
         Console.WriteLine("{0} is outside the range of a Double.", _
                           value)
      End If
      
      value = Double.MaxValue.ToString()
      If Double.TryParse(value, number) Then
         Console.WriteLine(number)
      Else
         Console.WriteLine("{0} is outside the range of a Double.", _
                           value)
      End If
   End Sub
End Module
' 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.

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

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

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

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

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

TryParse(ReadOnlySpan<Byte>, IFormatProvider, Double)

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

Пытается проанализировать диапазон символов UTF-8 в значение.

public:
 static bool TryParse(ReadOnlySpan<System::Byte> utf8Text, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result) = IUtf8SpanParsable<double>::TryParse;
public static bool TryParse (ReadOnlySpan<byte> utf8Text, IFormatProvider? provider, out double result);
static member TryParse : ReadOnlySpan<byte> * IFormatProvider * double -> bool
Public Shared Function TryParse (utf8Text As ReadOnlySpan(Of Byte), provider As IFormatProvider, ByRef result As Double) As Boolean

Параметры

utf8Text
ReadOnlySpan<Byte>

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

provider
IFormatProvider

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

result
Double

При возврате содержит результат успешного анализа utf8Text или неопределенного значения при сбое.

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

true, если utf8Text был успешно проанализирован; в противном случае false.

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

TryParse(ReadOnlySpan<Char>, IFormatProvider, Double)

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

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

public:
 static bool TryParse(ReadOnlySpan<char> s, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result) = ISpanParsable<double>::TryParse;
public static bool TryParse (ReadOnlySpan<char> s, IFormatProvider? provider, out double result);
static member TryParse : ReadOnlySpan<char> * IFormatProvider * double -> bool
Public Shared Function TryParse (s As ReadOnlySpan(Of Char), provider As IFormatProvider, ByRef result As Double) As Boolean

Параметры

s
ReadOnlySpan<Char>

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

provider
IFormatProvider

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

result
Double

При возврате этого метода содержит результат успешного анализа sили неопределенное значение при сбое.

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

true, если s был успешно проанализирован; в противном случае false.

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

TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Double)

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

Пытается проанализировать диапазон символов UTF-8 в значение.

public:
 static bool TryParse(ReadOnlySpan<System::Byte> utf8Text, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result) = System::Numerics::INumberBase<double>::TryParse;
public static bool TryParse (ReadOnlySpan<byte> utf8Text, System.Globalization.NumberStyles style, IFormatProvider? provider, out double result);
static member TryParse : ReadOnlySpan<byte> * System.Globalization.NumberStyles * IFormatProvider * double -> bool
Public Shared Function TryParse (utf8Text As ReadOnlySpan(Of Byte), style As NumberStyles, provider As IFormatProvider, ByRef result As Double) As Boolean

Параметры

utf8Text
ReadOnlySpan<Byte>

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

style
NumberStyles

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

provider
IFormatProvider

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

result
Double

При возврате содержит результат успешного анализа utf8Text или неопределенного значения при сбое.

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

true, если utf8Text был успешно проанализирован; в противном случае false.

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

TryParse(ReadOnlySpan<Byte>, Double)

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

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

public:
 static bool TryParse(ReadOnlySpan<System::Byte> utf8Text, [Runtime::InteropServices::Out] double % result);
public static bool TryParse (ReadOnlySpan<byte> utf8Text, out double result);
static member TryParse : ReadOnlySpan<byte> * double -> bool
Public Shared Function TryParse (utf8Text As ReadOnlySpan(Of Byte), ByRef result As Double) As Boolean

Параметры

utf8Text
ReadOnlySpan<Byte>

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

result
Double

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

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

true, если utf8Text был успешно преобразован; в противном случае false.

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

TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Double)

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

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

public:
 static bool TryParse(ReadOnlySpan<char> s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result);
public:
 static bool TryParse(ReadOnlySpan<char> s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result) = System::Numerics::INumberBase<double>::TryParse;
public static bool TryParse (ReadOnlySpan<char> s, System.Globalization.NumberStyles style, IFormatProvider? provider, out double result);
public static bool TryParse (ReadOnlySpan<char> s, System.Globalization.NumberStyles style, IFormatProvider provider, out double result);
static member TryParse : ReadOnlySpan<char> * System.Globalization.NumberStyles * IFormatProvider * double -> bool
Public Shared Function TryParse (s As ReadOnlySpan(Of Char), style As NumberStyles, provider As IFormatProvider, ByRef result As Double) As Boolean

Параметры

s
ReadOnlySpan<Char>

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

style
NumberStyles

Побитовое сочетание значений NumberStyles, указывающее разрешенный формат s. Обычное значение, указываемое, Float в сочетании с AllowThousands.

provider
IFormatProvider

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

result
Double

Когда этот метод возвращается и если преобразование выполнено успешно, содержит число с плавающей запятой двойной точности, эквивалентное числового значения или символа, содержащегося в s. Содержит ноль, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр snull, пустой диапазон символов или число в формате, совместимом с style. Если s является допустимым числом меньше Double.MinValue, resultNegativeInfinity. Если s является допустимым числом, превышающим Double.MaxValue, resultPositiveInfinity. Этот параметр передается неинициализирован; любое исходное значение, предоставленное в result, будет перезаписан.

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

true, если s был успешно преобразован; в противном случае false.

Комментарии

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

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

TryParse(String, NumberStyles, IFormatProvider, Double)

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

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

public:
 static bool TryParse(System::String ^ s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result);
public:
 static bool TryParse(System::String ^ s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] double % result) = System::Numerics::INumberBase<double>::TryParse;
public static bool TryParse (string s, System.Globalization.NumberStyles style, IFormatProvider provider, out double result);
public static bool TryParse (string? s, System.Globalization.NumberStyles style, IFormatProvider? provider, out double result);
static member TryParse : string * System.Globalization.NumberStyles * IFormatProvider * double -> bool
Public Shared Function TryParse (s As String, style As NumberStyles, provider As IFormatProvider, ByRef result As Double) As Boolean

Параметры

s
String

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

style
NumberStyles

Побитовое сочетание значений NumberStyles, указывающее разрешенный формат s. Обычное значение, указываемое, Float в сочетании с AllowThousands.

provider
IFormatProvider

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

result
Double

При возврате этого метода содержит число с плавающей запятой двойной точности, эквивалентное числового значения или символа, содержащегося в s, если преобразование выполнено успешно, или ноль, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр snull или Empty или не имеет формата, соответствующего style, или если style не является допустимым сочетанием констант перечисления NumberStyles. Он также завершается ошибкой в .NET Framework или .NET Core 2.2 и более ранних версиях, если s представляет число меньше SByte.MinValue или больше SByte.MaxValue. Этот параметр передается неинициализирован; любое исходное значение, предоставленное в result, будет перезаписан.

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

true, если s был успешно преобразован; в противном случае false.

Исключения

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

-или-

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

Примеры

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

string value;
NumberStyles style;
CultureInfo culture;
double number;

// Parse currency value using en-GB culture.
value = "£1,097.63";
style = NumberStyles.Number | NumberStyles.AllowCurrencySymbol;
culture = CultureInfo.CreateSpecificCulture("en-GB");
if (Double.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
//       Converted '£1,097.63' to 1097.63.

value = "1345,978";
style = NumberStyles.AllowDecimalPoint;
culture = CultureInfo.CreateSpecificCulture("fr-FR");
if (Double.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
//       Converted '1345,978' to 1345.978.

value = "1.345,978";
style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands;
culture = CultureInfo.CreateSpecificCulture("es-ES");
if (Double.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
//       Converted '1.345,978' to 1345.978.

value = "1 345,978";
if (Double.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
//       Unable to convert '1 345,978'.
// Parse currency value using en-GB culture.
let value = "£1,097.63"
let style = NumberStyles.Number ||| NumberStyles.AllowCurrencySymbol
let culture = CultureInfo.CreateSpecificCulture "en-GB"
match Double.TryParse(value, style, culture) with
| true, number ->
    printfn $"Converted '{value}' to {number}."
| _ ->
    printfn $"Unable to convert '{value}'."
// Displays:
//       Converted '£1,097.63' to 1097.63.

let value = "1345,978"
let style = NumberStyles.AllowDecimalPoint
let culture = CultureInfo.CreateSpecificCulture "fr-FR"
match Double.TryParse(value, style, culture) with
| true, number ->
    printfn $"Converted '{value}' to {number}."
| _ ->
    printfn $"Unable to convert '{value}'."
// Displays:
//       Converted '1345,978' to 1345.978.

let value = "1.345,978"
let style = NumberStyles.AllowDecimalPoint ||| NumberStyles.AllowThousands
let culture = CultureInfo.CreateSpecificCulture("es-ES")
match Double.TryParse(value, style, culture) with
| true, number ->
    printfn $"Converted '{value}' to {number}."
| _ ->
    printfn $"Unable to convert '{value}'."
// Displays:
//       Converted '1.345,978' to 1345.978.

let value = "1 345,978"
match Double.TryParse(value, style, culture) with
| true, number ->
    printfn $"Converted '{value}' to {number}."
| _ ->
    printfn $"Unable to convert '{value}'."
// Displays:
//       Unable to convert '1 345,978'.
Dim value As String
Dim style As NumberStyles
Dim culture As CultureInfo
Dim number As Double

' Parse currency value using en-GB culture.
value = "£1,097.63"
style = NumberStyles.Number Or NumberStyles.AllowCurrencySymbol
culture = CultureInfo.CreateSpecificCulture("en-GB")
If Double.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If    
' Displays: 
'       Converted '£1,097.63' to 1097.63.

value = "1345,978"
style = NumberStyles.AllowDecimalPoint
culture = CultureInfo.CreateSpecificCulture("fr-FR")
If Double.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If    
' Displays:
'       Converted '1345,978' to 1345.978.

value = "1.345,978"
style = NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands
culture = CultureInfo.CreateSpecificCulture("es-ES")
If Double.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If    
' Displays: 
'       Converted '1.345,978' to 1345.978.

value = "1 345,978"
If Double.TryParse(value, style, culture, number) Then
   Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
   Console.WriteLine("Unable to convert '{0}'.", value)
End If    
' Displays:
'       Unable to convert '1 345,978'.

Комментарии

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

Метод TryParse похож на метод Parse(String, NumberStyles, IFormatProvider), за исключением того, что этот метод не создает исключение, если преобразование завершается ошибкой. Если преобразование выполнено успешно, возвращаемое значение true, а параметр result задан в результаты преобразования. Если преобразование завершается ошибкой, возвращаемое значение равно false, а параметру result присвоено значение нулю. Это устраняет необходимость использовать обработку исключений для проверки FormatException в случае, если s является недопустимым и не может быть успешно проанализирован.

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

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

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

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

Элемент Описание
ws Необязательный пробел. Пробел может отображаться в начале s, если style включает флаг NumberStyles.AllowLeadingWhite. Он может отображаться в конце s, если style включает флаг NumberStyles.AllowTrailingWhite.
$ Символ валюты, зависящий от языка и региональных параметров. Его положение в строке определяется свойствами NumberFormatInfo.CurrencyNegativePattern или NumberFormatInfo.CurrencyPositivePattern объекта NumberFormatInfo, возвращаемого методом IFormatProvider.GetFormat параметра provider. Символ валюты может отображаться в 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 может представлять число с помощью экспоненциальной нотации. Параметр s может представлять число в экспоненциальной нотации, если стиль включает флаг NumberStyles.AllowExponent.
экспоненциальные цифры Ряд цифр от 0 до 9, указывающий экспонент.

Заметка

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

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

Значение NumberStyles Элементы, разрешенные в s в дополнение к цифрам
None Только элемент целочисленных цифр .
AllowDecimalPoint . и дробные цифры элементов.
AllowExponent Параметр s также может использовать экспоненциальную нотацию. Этот флаг сам поддерживает значения в форме целозначные цифры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, например объект NumberFormatInfo или CultureInfo. Параметр provider предоставляет сведения о языках и региональных параметрах, используемых в синтаксическом анализе. Если providernull или не удается получить объект NumberFormatInfo, используется информация о формате текущего языка и региональных параметров.

Преобразование завершается ошибкой, если параметр snull или не является числовым значением, параметр provider не выдает объект NumberFormatInfo или параметр style не является сочетанием битовых флагов из перечисления NumberStyles.

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

using System;

public class Example
{
   public static void Main()
   {
      string value;
      double number;

      value = Double.MinValue.ToString();
      if (Double.TryParse(value, out number))
         Console.WriteLine(number);
      else
         Console.WriteLine("{0} is outside the range of a Double.",
                           value);

      value = Double.MaxValue.ToString();
      if (Double.TryParse(value, out number))
         Console.WriteLine(number);
      else
         Console.WriteLine("{0} is outside the range of a Double.",
                           value);
   }
}
// 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.
open System

[<EntryPoint>]
let main _ = 
    let value = string Double.MinValue
    match Double.TryParse value with
    | true, number ->
        printfn $"{number}"
    | _ ->
        printfn $"{value} is outside the range of a Double."

    let value = string Double.MaxValue
    match Double.TryParse value with
    | true, number ->
        printfn $"{number}"
    | _ ->
        printfn $"{value} is outside the range of a Double."

    0
// 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.
Module Example
   Public Sub Main()
      Dim value As String
      Dim number As Double
      
      value = Double.MinValue.ToString()
      If Double.TryParse(value, number) Then
         Console.WriteLine(number)
      Else
         Console.WriteLine("{0} is outside the range of a Double.", _
                           value)
      End If
      
      value = Double.MaxValue.ToString()
      If Double.TryParse(value, number) Then
         Console.WriteLine(number)
      Else
         Console.WriteLine("{0} is outside the range of a Double.", _
                           value)
      End If
   End Sub
End Module
' 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.

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

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

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

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

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