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
, если преобразование выполнено успешно, или ноль, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр s
null
или пуст. Если s
является допустимым числом меньше Double.MinValue, result
NegativeInfinity. Если s
является допустимым числом, превышающим Double.MaxValue, result
PositiveInfinity. Этот параметр передается неинициализирован; любое исходное значение, предоставленное в 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
, если преобразование выполнено успешно, или ноль, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр s
null
или 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.
См. также раздел
- Parse(String)
- ToString()
- синтаксический анализ числовых строк в .NET
- пример: служебная программа форматирования WinForms .NET Core (C#)
- пример : служебная программа форматирования WinForms .NET Core (Visual Basic)
Применяется к
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
, если преобразование выполнено успешно или ноль, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если utf8Text
Empty или не имеет допустимого формата. Этот параметр передается неинициализирован; любое исходное значение, предоставленное в результате, будет перезаписан.
Возвращаемое значение
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
. Содержит ноль, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр s
null
, пустой диапазон символов или число в формате, совместимом с style
. Если s
является допустимым числом меньше Double.MinValue, result
NegativeInfinity. Если s
является допустимым числом, превышающим Double.MaxValue, result
PositiveInfinity. Этот параметр передается неинициализирован; любое исходное значение, предоставленное в 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
, если преобразование выполнено успешно, или ноль, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр s
null
или Empty или не имеет формата, соответствующего style
, или если style
не является допустимым сочетанием констант перечисления NumberStyles. Он также завершается ошибкой в .NET Framework или .NET Core 2.2 и более ранних версиях, если s
представляет число меньше SByte.MinValue или больше SByte.MaxValue. Этот параметр передается неинициализирован; любое исходное значение, предоставленное в result
, будет перезаписан.
Возвращаемое значение
true
, если s
был успешно преобразован; в противном случае false
.
Исключения
Примеры
В следующем примере показано использование метода 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
предоставляет сведения о языках и региональных параметрах, используемых в синтаксическом анализе. Если 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.PositiveInfinity или Double.NegativeInfinity. Однако существует небольшой набор значений, которые считаются ближе к максимальному или минимальному значению Double, чем к положительной или отрицательной бесконечности. В этих случаях метод вычисляет результат Double.MaxValue или Double.MinValue.
Если разделитель обнаружен в параметре s
во время операции синтаксического анализа, а применимые денежные или числовые разделители и разделители групп совпадают, операция синтаксического анализа предполагает, что разделитель является десятичным разделителем, а не разделителем групп. Дополнительные сведения о разделителях см. в разделе CurrencyDecimalSeparator, NumberDecimalSeparator, CurrencyGroupSeparatorи NumberGroupSeparator.