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
- Исходный код:
- 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
- Исходный код:
- 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
- Исходный код:
- 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, если 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.PositiveInfinitySymbolNumberFormatInfo.NegativeInfinitySymbolNumberFormatInfo.NaNSymbol языка и региональных параметров. Это сравнение строк не учитывает регистр в .NET Core 3.0 и более поздних версиях, но учитывает регистр в предыдущих версиях, включая .NET Framework. Параметр s также может быть строкой формы:
[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 он создает OverflowExceptionисключение . В .NET Core 3.0 и более поздних версиях он возвращается Double.NegativeInfinity при попытке синтаксического анализа или Double.PositiveInfinity при попытке синтаксического MinValueанализа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, если 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, NumberDecimalSeparatorCurrencyGroupSeparatorи NumberGroupSeparator.
См. также раздел
- Parse(String)
- ToString()
- Анализ числовых строк в .NET
- Пример: программа форматирования WinForms для .NET Core (C#)
- Пример: программа форматирования WinForms для .NET Core (Visual Basic)
Применяется к
TryParse(ReadOnlySpan<Byte>, IFormatProvider, Double)
- Исходный код:
- Double.cs
- Исходный код:
- Double.cs
- Исходный код:
- 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
- Исходный код:
- 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
- Исходный код:
- 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
- Исходный код:
- 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
- Исходный код:
- Double.cs
- Исходный код:
- Double.cs
Преобразует диапазон символов, содержащий строковое представление числа в указанном стиле и формате языка и региональных параметров, в эквивалентный числу с плавающей запятой двойной точности. Возвращаемое значение указывает, выполнено ли преобразование успешно или завершилось сбоем.
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, [Runtime::InteropServices::Out] double % result);
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
- Исходный код:
- 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, если 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 для параметра задан результат преобразования. Если преобразование завершается falseresult ошибкой, возвращаемое значение равно нулю. Это устраняет необходимость использовать обработку исключений для FormatException тестирования в случае s , которое является недопустимым и не может быть успешно проанализировано.
Параметр style определяет допустимый формат параметра для успешной s операции синтаксического анализа. Это должно быть сочетание битовых флагов из NumberStyles перечисления. Следующие NumberStyles члены не поддерживаются:
Параметр s может содержать NumberFormatInfo.PositiveInfinitySymbolили NumberFormatInfo.NegativeInfinitySymbolNumberFormatInfo.NaNSymbol символ для языка и региональных параметров, указанных в параметреprovider. Это сравнение строк не учитывает регистр в .NET Core 3.0 и более поздних версиях, но учитывает регистр в предыдущих версиях, включая .NET Framework. Кроме того, в зависимости от значения styles параметр может включать следующие элементы:
[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 содержит флаг. |
| . | Символ десятичной запятой для конкретного языка и региональных параметров. Символ десятичной запятой текущего языка и региональных параметров может отображаться при sstyle наличии флага NumberStyles.AllowDecimalPoint . |
| дробные цифры | Ряд цифр от 0 до 9, указывающий дробную часть числа. Дробные цифры могут отображаться при sstyle включении флага NumberStyles.AllowDecimalPoint . |
| e | Символ e или E, указывающий, что s может представлять число с помощью экспоненциальной нотации. Параметр s может представлять число в экспоненциальной нотации, если стиль включает NumberStyles.AllowExponent флаг. |
| экспоненциальные цифры | Ряд цифр от 0 до 9, указывающий экспонент. |
Заметка
Все завершающие символы s NUL (U+0000) игнорируются операцией синтаксического анализа независимо от значения аргумента style .
Строка только с цифрами (которая соответствует NumberStyles.None стилю) всегда анализируется успешно, если он находится в диапазоне Double типа. Остальные System.Globalization.NumberStyles элементы управления элементами управления, которые могут быть, но не обязательно должны присутствовать в входной строке. В следующей таблице показано, как отдельные NumberStyles флаги влияют на элементы, которые могут присутствовать в s.
| Значение NumberStyles | Элементы, разрешенные в s в дополнение к цифрам |
|---|---|
| None | Только элемент целочисленных цифр . |
| AllowDecimalPoint | Элементы . и дробные цифры . |
| AllowExponent | Параметр s также может использовать экспоненциальную нотацию. Этот флаг сам поддерживает значения в виде целозначных цифрEэкспоненциальные цифры; Дополнительные флаги необходимы для успешного анализа строк в экспоненциальной нотации с такими элементами, как положительные или отрицательные знаки и символы десятичной запятой. |
| AllowLeadingWhite | Элемент ws в начале s. |
| AllowTrailingWhite | Элемент ws в конце s. |
| AllowLeadingSign | Элемент sign в начале s. |
| AllowTrailingSign | Элемент sign в конце 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 он создает OverflowExceptionисключение . В .NET Core 3.0 и более поздних версиях он возвращается Double.NegativeInfinity при попытке синтаксического анализа или Double.PositiveInfinity при попытке синтаксического MinValueанализа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, если 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, NumberDecimalSeparatorCurrencyGroupSeparatorи NumberGroupSeparator.