Double.TryParse Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Преобразует строковое представление числа в эквивалентное ему число двойной точности с плавающей запятой. Возвращает значение, указывающее, успешно ли выполнено преобразование.
Перегрузки
TryParse(ReadOnlySpan<Char>, IFormatProvider, Double) |
Пытается проанализировать диапазон символов в значение. |
TryParse(ReadOnlySpan<Char>, Double) |
Преобразует представление диапазона числа указанного стиля, выраженное в формате, соответствующем определенному языку и региональным параметрам, в эквивалентное ему число двойной точности с плавающей запятой. Возвращает значение, указывающее, успешно ли выполнено преобразование. |
TryParse(String, Double) |
Преобразует строковое представление числа в эквивалентное ему число двойной точности с плавающей запятой. Возвращает значение, указывающее, успешно ли выполнено преобразование. |
TryParse(ReadOnlySpan<Byte>, IFormatProvider, Double) |
Пытается проанализировать диапазон символов UTF-8 в значение. |
TryParse(String, 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(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<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
, является пустым или имеет формат, несовместимый со значением style
. Преобразование также завершается ошибкой, если style
не является допустимым сочетанием перечисленных констант NumberStyles. Если 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] [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.
См. также раздел
- Parse(String)
- ToString()
- Синтаксический анализ числовых строк в .NET
- Пример: служебная программа форматирования .NET Core WinForms (C#)
- Пример: служебная программа форматирования .NET Core WinForms (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(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<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] [$] [знак] [целочисленные цифры,]целочисленные цифры[.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.PositiveInfinity или Double.NegativeInfinity. Однако существует небольшой набор значений, которые считаются ближе к максимальным или минимальным значениям, чем к положительной или отрицательной Double бесконечности. В таких случаях метод вычисляет результат Double.MaxValue или Double.MinValue.
Если разделитель обнаружен в s
параметре во время операции синтаксического анализа, а применимые денежные или числовые разделители и разделители групп совпадают, операция синтаксического анализа предполагает, что разделитель является десятичным, а не разделителем группы. Дополнительные сведения о разделителях см. в разделе CurrencyDecimalSeparator, NumberDecimalSeparator, CurrencyGroupSeparatorи NumberGroupSeparator.
См. также раздел
Применяется к
Кері байланыс
https://aka.ms/ContentUserFeedback.
Жақында қолжетімді болады: 2024 жыл бойы біз GitHub Issues жүйесін мазмұнға арналған кері байланыс механизмі ретінде біртіндеп қолданыстан шығарамыз және оны жаңа кері байланыс жүйесімен ауыстырамыз. Қосымша ақпаратты мұнда қараңыз:Жіберу және пікірді көру