Double.TryParse Метод

Определение

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

Перегрузки

TryParse(String, IFormatProvider, Double)

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

TryParse(String, Double)

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

TryParse(ReadOnlySpan<Char>, IFormatProvider, Double)

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

TryParse(ReadOnlySpan<Char>, Double)

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

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)

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

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 или неопределенное значение при сбое.

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

Boolean

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

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

TryParse(String, Double)

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

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, если преобразование завершилось успешно, или нуль, если оно завершилось неудачно. Преобразование не удается выполнить, если параметр s имеет значение null или Empty или не является числом в допустимом формате. Он также завершается сбоем в платформа .NET Framework и .NET Core 2.2 и более ранних версий, если s представляет число меньше Double.MinValue или больше Double.MaxValue. Этот параметр передается неинициализированным; любое значение, первоначально предоставленное в result, будет перезаписано.

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

Boolean

Значение 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] [sign] [целочисленные цифры,]целочисленные цифры[.[ fractional-digits]][e[sign]exponential-digits][ws]

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

Элемент Описание
ws Ряд символов пробелов.
sign Знак отрицательного или положительного знака.
целочисленные цифры Ряд числовых символов в диапазоне от 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.PositiveInfinityDouble.NegativeInfinity. Однако существует небольшой набор значений, которые считаются ближе к максимальному или минимальному значению, чем к положительной или отрицательной Double бесконечности. В таких случаях метод вычисляет результат или Double.MaxValueDouble.MinValue.

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

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

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

TryParse(ReadOnlySpan<Char>, IFormatProvider, Double)

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

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или неопределенное значение при сбое.

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

Boolean

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

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

TryParse(ReadOnlySpan<Char>, Double)

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

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, если преобразование завершилось успешно, или ноль, если оно завершилось неудачно. Преобразование не удается выполнить, если параметр s имеет значение null, является пустым или имеет формат, несовместимый со значением style. Преобразование также завершается ошибкой, если style не является допустимым сочетанием перечисленных констант NumberStyles. Если s является допустимым числом меньше Double.MinValue, result имеет значение NegativeInfinity. Если s является допустимым числом больше Double.MaxValue, result имеет значение PositiveInfinity. Этот параметр передается неинициализированным; любое значение, первоначально предоставленное в result, будет перезаписано.

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

Boolean

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

Комментарии

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

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

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

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

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. Если преобразование завершилось неудачей, содержит ноль. Преобразование не удается выполнить, если параметр s является null, пустым диапазоном символов или числом в формате, несовместимом с style. Если s является допустимым числом меньше Double.MinValue, result имеет значение NegativeInfinity. Если s является допустимым числом больше Double.MaxValue, result имеет значение PositiveInfinity. Этот параметр передается неинициализированным; любое значение, первоначально предоставленное в result, будет перезаписано.

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

Boolean

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

Комментарии

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

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

TryParse(String, NumberStyles, IFormatProvider, Double)

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

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, если преобразование завершилось успешно, или нуль, если оно завершилось неудачно. Преобразование завершается неудачно, если параметр s имеет значение null или Empty, не является значением в формате, совместимом с параметром style или если style не является допустимой комбинацией перечисленных констант NumberStyles. Он также завершается сбоем в платформа .NET Framework или .NET Core 2.2 и более ранних версий, если s представляет число меньше SByte.MinValue или больше SByte.MaxValue. Этот параметр передается неинициализированным; любое значение, первоначально предоставленное в result, будет перезаписано.

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

Boolean

Значение 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] [$] [знак] [целочисленные цифры,]целочисленные цифры[.fractional-digits][e[sign]exponential-digits][ws]

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

Элемент Описание
ws Необязательный пробел. Пробел может отображаться в начале , s если style включает флаг NumberStyles.AllowLeadingWhite . Он может отображаться в конце , s если style включает флаг NumberStyles.AllowTrailingWhite .
$ Символ валюты, зависящий от языка и региональных параметров. Его положение в строке определяется свойствами NumberFormatInfo.CurrencyNegativePattern или NumberFormatInfo.CurrencyPositivePattern объекта, NumberFormatInfo возвращаемым методом IFormatProvider.GetFormatprovider параметра . Символ валюты может отображаться в , s если style включает NumberStyles.AllowCurrencySymbol флаг .
sign Необязательный знак. Знак может отображаться в начале 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 Элементы, разрешенные в , в дополнение к цифрам
None Только целочисленный элемент.
AllowDecimalPoint Элементы . и fractional-digits .
AllowExponent Параметр s также может использовать экспоненциальную нотацию. Этот флаг сам по себе поддерживает значения в виде целочисленных цифрEэкспоненциальных цифр; Дополнительные флаги необходимы для успешного анализа строк в экспоненциальной нотации с такими элементами, как положительные или отрицательные знаки и символы десятичной запятой.
AllowLeadingWhite Элемент ws в начале s.
AllowTrailingWhite Элемент ws в конце s.
AllowLeadingSign Элемент sign в начале s.
AllowTrailingSign Элемент знака в конце s.
AllowParentheses Элемент sign в виде круглых скобок, включающих числовое значение.
AllowThousands Элемент , .
AllowCurrencySymbol Элемент $.
Currency Все. Параметр s не может представлять шестнадцатеричное число или число в экспоненциальной нотации.
Float Элемент ws в начале или конце s, знак в начале sи символ . Параметр s также может использовать экспоненциальную нотацию.
Number Элементы ws, sign, разделитель тысяч (,) и десятичная запятая (.) .
Any Все стили, кроме s не могут представлять шестнадцатеричное число.

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

Преобразование завершается ошибкой, если s параметр является null числовым значением, 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.PositiveInfinityDouble.NegativeInfinity. Однако существует небольшой набор значений, которые считаются ближе к максимальному или минимальному значению, чем к положительной или отрицательной Double бесконечности. В таких случаях метод вычисляет результат или Double.MaxValueDouble.MinValue.

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

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

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