Udostępnij za pośrednictwem


Double.TryParse Metoda

Definicja

Konwertuje reprezentację ciągu liczby na równoważną liczbę zmiennoprzecinkową o podwójnej precyzji. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

Przeciążenia

TryParse(String, IFormatProvider, Double)

Próbuje przeanalizować ciąg w wartości.

TryParse(ReadOnlySpan<Char>, Double)

Konwertuje reprezentację zakresu liczby w określonym stylu i formacie specyficznym dla kultury na równoważnik liczby zmiennoprzecinkowych o podwójnej precyzji. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

TryParse(String, Double)

Konwertuje reprezentację ciągu liczby na równoważną liczbę zmiennoprzecinkową o podwójnej precyzji. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

TryParse(ReadOnlySpan<Byte>, IFormatProvider, Double)

Próbuje przeanalizować zakres znaków UTF-8 w wartość.

TryParse(ReadOnlySpan<Char>, IFormatProvider, Double)

Próbuje przeanalizować zakres znaków w wartości.

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

Próbuje przeanalizować zakres znaków UTF-8 w wartość.

TryParse(ReadOnlySpan<Byte>, Double)

Próbuje przekonwertować zakres znaków UTF-8 zawierający reprezentację ciągu liczby na równoważnik liczby zmiennoprzecinkowych o podwójnej precyzji.

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

Konwertuje zakres znaków zawierający ciąg reprezentujący liczbę w określonym stylu i formacie specyficznym dla kultury na równoważnik liczby zmiennoprzecinkowych o podwójnej precyzji. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

TryParse(String, NumberStyles, IFormatProvider, Double)

Konwertuje reprezentację ciągu liczby w określonym stylu i formacie specyficznym dla kultury na równoważnik liczby zmiennoprzecinkowych o podwójnej precyzji. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

Uwagi

W programie .NET Core 3.0 lub nowszym wartości, które są zbyt duże do reprezentowania, są zaokrąglane do PositiveInfinity lub NegativeInfinity zgodnie ze specyfikacją IEEE 754. W poprzednich wersjach, w tym .NET Framework, analizowanie wartości, która była zbyt duża, aby reprezentować, spowodowała awarię.

TryParse(String, IFormatProvider, Double)

Źródło:
Double.cs
Źródło:
Double.cs
Źródło:
Double.cs

Próbuje przeanalizować ciąg w wartości.

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

Parametry

s
String

Ciąg do analizy.

provider
IFormatProvider

Obiekt, który udostępnia informacje o formatowaniu specyficznym dla kultury na temat s.

result
Double

Gdy ta metoda zwraca, zawiera wynik pomyślnego analizowania s lub niezdefiniowanej wartości w przypadku błędu.

Zwraca

true, jeśli s została pomyślnie przeanalizowana; w przeciwnym razie false.

Dotyczy

TryParse(ReadOnlySpan<Char>, Double)

Źródło:
Double.cs
Źródło:
Double.cs
Źródło:
Double.cs

Konwertuje reprezentację zakresu liczby w określonym stylu i formacie specyficznym dla kultury na równoważnik liczby zmiennoprzecinkowych o podwójnej precyzji. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

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

Parametry

s
ReadOnlySpan<Char>

Zakres znaków zawierający reprezentację ciągu liczby do przekonwertowania.

result
Double

Gdy ta metoda zwraca wartość zmiennoprzecinkową o podwójnej precyzji, równoważną wartości liczbowej lub symbolu zawartego w parametrze s, jeśli konwersja zakończyła się pomyślnie, lub zero, jeśli konwersja nie powiodła się. Konwersja kończy się niepowodzeniem, jeśli parametr s jest null lub pusty lub nie jest w formacie zgodnym z style. Konwersja również kończy się niepowodzeniem, jeśli style nie jest prawidłową kombinacją NumberStyles wyliczonych stałych. Jeśli s jest prawidłową liczbą mniejszą niż Double.MinValue, result jest NegativeInfinity. Jeśli s jest prawidłową liczbą większą niż Double.MaxValue, result jest PositiveInfinity. Ten parametr jest przekazywany niezainicjowany; każda wartość pierwotnie podana w result zostanie zastąpiona.

Zwraca

true, jeśli s została pomyślnie przekonwertowana; w przeciwnym razie false.

Uwagi

W programie .NET Core 3.0 lub nowszym wartości, które są zbyt duże do reprezentowania, są zaokrąglane do PositiveInfinity lub NegativeInfinity zgodnie ze specyfikacją IEEE 754. W poprzednich wersjach, w tym .NET Framework, analizowanie wartości, która była zbyt duża, aby reprezentować, spowodowała awarię.

Dotyczy

TryParse(String, Double)

Źródło:
Double.cs
Źródło:
Double.cs
Źródło:
Double.cs

Konwertuje reprezentację ciągu liczby na równoważną liczbę zmiennoprzecinkową o podwójnej precyzji. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

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

Parametry

s
String

Ciąg zawierający liczbę do przekonwertowania.

result
Double

Gdy ta metoda zwraca wartość , zawiera zmiennoprzecinkową liczbę o podwójnej precyzji równoważną parametrowi s, jeśli konwersja zakończyła się pomyślnie lub zero, jeśli konwersja nie powiodła się. Konwersja kończy się niepowodzeniem, jeśli parametr s jest null lub Empty lub nie jest liczbą w prawidłowym formacie. Nie powiedzie się również w programach .NET Framework i .NET Core 2.2 i starszych wersjach, jeśli s reprezentuje liczbę mniejszą niż Double.MinValue lub większą niż Double.MaxValue. Ten parametr jest przekazywany niezainicjowany; każda wartość pierwotnie podana w result zostanie zastąpiona.

Zwraca

true, jeśli s została pomyślnie przekonwertowana; w przeciwnym razie false.

Przykłady

W poniższym przykładzie użyto metody TryParse(String, Double), aby przekonwertować reprezentacje ciągów wartości liczbowych na Double wartości. Przyjęto założenie, że en-US jest bieżącą kulturą.

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'.

Uwagi

W programie .NET Core 3.0 lub nowszym wartości, które są zbyt duże do reprezentowania, są zaokrąglane do PositiveInfinity lub NegativeInfinity zgodnie ze specyfikacją IEEE 754. W poprzednich wersjach, w tym .NET Framework, analizowanie wartości, która była zbyt duża, aby reprezentować, spowodowała awarię.

To przeciążenie różni się od metody Double.Parse(String) przez zwrócenie wartości logicznej, która wskazuje, czy operacja analizowania zakończyła się pomyślnie, zamiast zwracać przeanalizowaną wartość liczbową. Eliminuje to konieczność użycia obsługi wyjątków w celu przetestowania FormatException w przypadku, gdy s jest nieprawidłowa i nie można jej pomyślnie przeanalizować.

Parametr s może zawierać NumberFormatInfo.PositiveInfinitySymbolbieżącej kultury , NumberFormatInfo.NegativeInfinitySymbol, NumberFormatInfo.NaNSymbol (porównanie ciągów jest uwzględniane wielkość liter) lub ciąg formularza:

[ws] [podpis] [cyfry całkowite,]cyfry-całkowite[.[ fractional-digits]][e[sign]exponential-digits][ws]

Elementy w nawiasach kwadratowych są opcjonalne. W poniższej tabeli opisano każdy element.

Pierwiastek Opis
ws Seria znaków odstępów.
podpisywania Znak ujemny lub symbol znaku dodatniego.
cyfry całkowite Seria znaków liczbowych z zakresu od 0 do 9, która określa integralną część liczby. Cyfry całkowite mogą być nieobecne, jeśli istnieją cyfry ułamkowe.
, Symbol separatora grup specyficznych dla kultury.
. Symbol separatora dziesiętnego specyficznego dla kultury.
cyfry ułamkowe Seria znaków liczbowych z zakresu od 0 do 9, która określa część ułamkową liczby.
E Wielkie lub małe litery znak "e", który wskazuje notację wykładniczą (naukową).
cyfry wykładnicze Seria znaków liczbowych z zakresu od 0 do 9, która określa wykładnik.

Aby uzyskać więcej informacji na temat formatów liczbowych, zobacz Typy formatowania.

Parametr s jest interpretowany przy użyciu kombinacji flag NumberStyles.Float i NumberStyles.AllowThousands. Oznacza to, że odstępy i tysiące separatorów są dozwolone, ale symbole waluty nie są. Aby jawnie zdefiniować elementy (takie jak symbole waluty, separatory tysięcy i odstępy), które mogą być obecne w s, użyj przeciążenia metody Double.TryParse(String, NumberStyles, IFormatProvider, Double).

Parametr s jest analizowany przy użyciu informacji o formatowaniu w obiekcie NumberFormatInfo zainicjowanym dla bieżącej kultury systemu. Aby uzyskać więcej informacji, zobacz NumberFormatInfo.CurrentInfo. Aby przeanalizować ciąg przy użyciu informacji o formatowaniu innej określonej kultury, użyj przeciążenia metody Double.TryParse(String, NumberStyles, IFormatProvider, Double).

Zazwyczaj jeśli przekażesz metodę Double.TryParse ciąg utworzony przez wywołanie metody Double.ToString, zwracana jest oryginalna wartość Double. Jednak ze względu na utratę dokładności wartości mogą nie być równe. Ponadto próba przeanalizowanie reprezentacji ciągu Double.MinValue lub Double.MaxValue nie powiedzie się. W programach .NET Framework i .NET Core 2.2 i poprzednich wersjach zgłasza OverflowException. W wersji .NET Core 3.0 lub nowszej program zwraca Double.NegativeInfinity, jeśli próbujesz przeanalizować MinValue lub Double.PositiveInfinity, jeśli próbujesz przeanalizować MaxValue. Poniższy przykład zawiera ilustrację.

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.

W programach .NET Framework i .NET Core 2.2 i starszych wersjach, jeśli s jest poza zakresem typu danych Double, metoda TryParse(String, Double) zgłasza OverflowException.

W przypadku platformy .NET Core 3.0 i nowszych wersji nie jest zgłaszany wyjątek, gdy s jest poza zakresem typu danych Double. W większości przypadków metoda TryParse(String, Double) oblicza wynik Double.PositiveInfinity lub Double.NegativeInfinity. Istnieje jednak niewielki zestaw wartości, które są uważane za zbliżone do maksymalnej lub minimalnej wartości Double niż do dodatniej lub ujemnej nieskończoności. W takich przypadkach metoda oblicza wynik Double.MaxValue lub Double.MinValue.

Jeśli separator napotkany w parametrze s podczas operacji analizy, a separatory dziesiętne i separatory grup są takie same, operacja analizy zakłada, że separator jest separatorem dziesiętnym, a nie separatorem grupy. Aby uzyskać więcej informacji na temat separatorów, zobacz CurrencyDecimalSeparator, NumberDecimalSeparator, CurrencyGroupSeparatori NumberGroupSeparator.

Zobacz też

Dotyczy

TryParse(ReadOnlySpan<Byte>, IFormatProvider, Double)

Źródło:
Double.cs
Źródło:
Double.cs

Próbuje przeanalizować zakres znaków UTF-8 w wartość.

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

Parametry

utf8Text
ReadOnlySpan<Byte>

Zakres znaków UTF-8 do przeanalizowania.

provider
IFormatProvider

Obiekt, który udostępnia informacje o formatowaniu specyficznym dla kultury na temat utf8Text.

result
Double

Po powrocie zawiera wynik pomyślnego analizowania utf8Text lub niezdefiniowanej wartości w przypadku błędu.

Zwraca

true, jeśli utf8Text została pomyślnie przeanalizowana; w przeciwnym razie false.

Dotyczy

TryParse(ReadOnlySpan<Char>, IFormatProvider, Double)

Źródło:
Double.cs
Źródło:
Double.cs
Źródło:
Double.cs

Próbuje przeanalizować zakres znaków w wartości.

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

Parametry

s
ReadOnlySpan<Char>

Zakres znaków do przeanalizowania.

provider
IFormatProvider

Obiekt, który udostępnia informacje o formatowaniu specyficznym dla kultury na temat s.

result
Double

Gdy ta metoda zwraca wartość , zawiera wynik pomyślnego analizowania slub niezdefiniowanej wartości w przypadku błędu.

Zwraca

true, jeśli s została pomyślnie przeanalizowana; w przeciwnym razie false.

Dotyczy

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

Źródło:
Double.cs
Źródło:
Double.cs

Próbuje przeanalizować zakres znaków UTF-8 w wartość.

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

Parametry

utf8Text
ReadOnlySpan<Byte>

Zakres znaków UTF-8 do przeanalizowania.

style
NumberStyles

Bitowa kombinacja stylów liczbowych, które mogą być obecne w utf8Text.

provider
IFormatProvider

Obiekt, który udostępnia informacje o formatowaniu specyficznym dla kultury na temat utf8Text.

result
Double

Po powrocie zawiera wynik pomyślnego analizowania utf8Text lub niezdefiniowanej wartości w przypadku błędu.

Zwraca

true, jeśli utf8Text została pomyślnie przeanalizowana; w przeciwnym razie false.

Dotyczy

TryParse(ReadOnlySpan<Byte>, Double)

Źródło:
Double.cs
Źródło:
Double.cs

Próbuje przekonwertować zakres znaków UTF-8 zawierający reprezentację ciągu liczby na równoważnik liczby zmiennoprzecinkowych o podwójnej precyzji.

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

Parametry

utf8Text
ReadOnlySpan<Byte>

Zakres znaków UTF-8 tylko do odczytu, który zawiera liczbę do przekonwertowania.

result
Double

Gdy ta metoda zwraca wartość zmiennoprzecinkowa o podwójnej precyzji, odpowiada wartości liczbowej lub symbolowi zawartemu w utf8Text, jeśli konwersja zakończyła się pomyślnie lub zero, jeśli konwersja nie powiodła się. Konwersja kończy się niepowodzeniem, jeśli utf8Text jest Empty lub nie jest w prawidłowym formacie. Ten parametr jest przekazywany niezainicjowany; każda wartość pierwotnie podana w wyniku zostanie zastąpiona.

Zwraca

true, jeśli utf8Text została pomyślnie przekonwertowana; w przeciwnym razie false.

Dotyczy

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

Źródło:
Double.cs
Źródło:
Double.cs
Źródło:
Double.cs

Konwertuje zakres znaków zawierający ciąg reprezentujący liczbę w określonym stylu i formacie specyficznym dla kultury na równoważnik liczby zmiennoprzecinkowych o podwójnej precyzji. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

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

Parametry

s
ReadOnlySpan<Char>

Zakres znaków tylko do odczytu zawierający liczbę do konwersji.

style
NumberStyles

Bitowa kombinacja wartości NumberStyles wskazująca dozwolony format s. Typowa wartość do określenia jest Float połączona z AllowThousands.

provider
IFormatProvider

Obiekt, który dostarcza informacje o formatowaniu specyficznym dla kultury na temat s.

result
Double

Gdy ta metoda zwróci wartość i jeśli konwersja powiodła się, zawiera zmiennoprzecinkową liczbę o podwójnej precyzji równoważną wartości liczbowej lub symbolu zawartego w s. Zawiera zero, jeśli konwersja nie powiodła się. Konwersja kończy się niepowodzeniem, jeśli parametr s jest null, pusty zakres znaków, a nie liczba w formacie zgodnym z style. Jeśli s jest prawidłową liczbą mniejszą niż Double.MinValue, result jest NegativeInfinity. Jeśli s jest prawidłową liczbą większą niż Double.MaxValue, result jest PositiveInfinity. Ten parametr jest przekazywany niezainicjowany; każda wartość pierwotnie podana w result zostanie zastąpiona.

Zwraca

true, jeśli s została pomyślnie przekonwertowana; w przeciwnym razie false.

Uwagi

W programie .NET Core 3.0 lub nowszym wartości, które są zbyt duże do reprezentowania, są zaokrąglane do PositiveInfinity lub NegativeInfinity zgodnie ze specyfikacją IEEE 754. W poprzednich wersjach, w tym .NET Framework, analizowanie wartości, która była zbyt duża, aby reprezentować, spowodowała awarię.

Dotyczy

TryParse(String, NumberStyles, IFormatProvider, Double)

Źródło:
Double.cs
Źródło:
Double.cs
Źródło:
Double.cs

Konwertuje reprezentację ciągu liczby w określonym stylu i formacie specyficznym dla kultury na równoważnik liczby zmiennoprzecinkowych o podwójnej precyzji. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

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

Parametry

s
String

Ciąg zawierający liczbę do przekonwertowania.

style
NumberStyles

Bitowa kombinacja wartości NumberStyles wskazująca dozwolony format s. Typowa wartość do określenia jest Float połączona z AllowThousands.

provider
IFormatProvider

IFormatProvider, który dostarcza informacje dotyczące formatowania specyficznego dla kultury na temat s.

result
Double

Gdy ta metoda zwraca wartość zmiennoprzecinkową o podwójnej precyzji, odpowiada wartości liczbowej lub symbolowi zawartemu w s, jeśli konwersja zakończyła się pomyślnie lub zero, jeśli konwersja nie powiodła się. Konwersja kończy się niepowodzeniem, jeśli parametr s jest null lub Empty lub nie jest w formacie zgodnym z stylelub jeśli style nie jest prawidłową kombinacją stałych wyliczenia NumberStyles. Nie powiedzie się również w programie .NET Framework lub .NET Core 2.2 i starszych wersjach, jeśli s reprezentuje liczbę mniejszą niż SByte.MinValue lub większą niż SByte.MaxValue. Ten parametr jest przekazywany niezainicjowany; każda wartość pierwotnie podana w result zostanie zastąpiona.

Zwraca

true, jeśli s została pomyślnie przekonwertowana; w przeciwnym razie false.

Wyjątki

style nie jest wartością NumberStyles.

-lub-

style zawiera wartość AllowHexSpecifier.

Przykłady

W poniższym przykładzie pokazano użycie metody Double.TryParse(String, NumberStyles, IFormatProvider, Double) do analizowania reprezentacji ciągów liczb, które mają określony styl i są formatowane przy użyciu konwencji określonej kultury.

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'.

Uwagi

W programie .NET Core 3.0 lub nowszym wartości, które są zbyt duże do reprezentowania, są zaokrąglane do PositiveInfinity lub NegativeInfinity zgodnie ze specyfikacją IEEE 754. W poprzednich wersjach, w tym .NET Framework, analizowanie wartości, która była zbyt duża, aby reprezentować, spowodowała awarię.

Metoda TryParse jest podobna do metody Parse(String, NumberStyles, IFormatProvider), z wyjątkiem tej metody nie zgłasza wyjątku, jeśli konwersja nie powiedzie się. Jeśli konwersja powiedzie się, zwracana wartość jest true, a parametr result jest ustawiony na wynik konwersji. Jeśli konwersja nie powiedzie się, zwracana wartość jest false, a parametr result jest ustawiony na zero. Eliminuje to konieczność użycia obsługi wyjątków w celu przetestowania FormatException w przypadku, gdy s jest nieprawidłowa i nie można jej pomyślnie przeanalizować.

Parametr style definiuje dozwolony format parametru s, aby operacja analizy zakończyła się pomyślnie. Musi to być kombinacja flag bitowych z wyliczenia NumberStyles. Następujące NumberStyles członków nie są obsługiwane:

Parametr s może zawierać NumberFormatInfo.PositiveInfinitySymbol, NumberFormatInfo.NegativeInfinitySymbollub NumberFormatInfo.NaNSymbol dla kultury wskazanej przez provider. Ponadto w zależności od wartości styleparametr s może zawierać następujące elementy:

[ws] [$] [podpis] [cyfry całkowite,]cyfry-całkowitoliczkowe[.ułamkowe cyfry][e[znak]cyfry wykładnicze][ws]

Elementy w nawiasach kwadratowych ([ i ]) są opcjonalne. W poniższej tabeli opisano każdy element.

Pierwiastek Opis
ws Opcjonalne białe znaki. Białe znaki mogą pojawić się na początku s, jeśli style zawiera flagę NumberStyles.AllowLeadingWhite. Może pojawić się na końcu s, jeśli style zawiera flagę NumberStyles.AllowTrailingWhite.
$ Symbol waluty specyficznej dla kultury. Jego pozycja w ciągu jest definiowana przez właściwości NumberFormatInfo.CurrencyNegativePattern lub NumberFormatInfo.CurrencyPositivePattern obiektu NumberFormatInfo zwrócone przez metodę IFormatProvider.GetFormat parametru provider. Symbol waluty może pojawić się w s, jeśli style zawiera flagę NumberStyles.AllowCurrencySymbol.
podpisywania Opcjonalny znak. Znak może pojawić się na początku s, jeśli style zawiera flagę NumberStyles.AllowLeadingSign i może pojawić się na końcu s, jeśli style zawiera flagę NumberStyles.AllowTrailingSign. Nawiasy mogą być używane w s, aby wskazać wartość ujemną, jeśli style zawiera flagę NumberStyles.AllowParentheses.
cyfry całkowite Seria cyfr z zakresu od 0 do 9, która określa integralną część liczby. Cyfry całkowite mogą być nieobecne, jeśli istnieją cyfry ułamkowe.
, Symbol separatora tysięcy specyficzny dla kultury. Symbol separatora tysięcy bieżącej kultury może pojawić się w s, jeśli style zawiera flagę NumberStyles.AllowThousands.
. Symbol separatora dziesiętnego specyficznego dla kultury. Symbol punktu dziesiętnego bieżącej kultury może pojawić się w s, jeśli style zawiera flagę NumberStyles.AllowDecimalPoint.
cyfry ułamkowe Seria cyfr od 0 do 9 określająca część ułamkową liczby. Cyfry ułamkowe mogą być wyświetlane w s, jeśli style zawiera flagę NumberStyles.AllowDecimalPoint.
e Znak e lub E, który wskazuje, że s może reprezentować liczbę przy użyciu notacji wykładniczej. Parametr s może reprezentować liczbę w notacji wykładniczej, jeśli styl zawiera flagę NumberStyles.AllowExponent.
cyfry wykładnicze Seria cyfr z zakresu od 0 do 9, która określa wykładnik.

Nuta

Wszystkie znaki NUL (U+0000) w s są ignorowane przez operację analizowania, niezależnie od wartości argumentu style.

Ciąg zawierający tylko cyfry (który odpowiada stylowi NumberStyles.None) zawsze analizuje się pomyślnie, jeśli znajduje się w zakresie typu Double. Pozostałe elementy członkowskie System.Globalization.NumberStyles, które mogą być, ale nie muszą być obecne w ciągu wejściowym. W poniższej tabeli przedstawiono, jak poszczególne flagi NumberStyles wpływają na elementy, które mogą być obecne w s.

Wartość NumberStyles Elementy dozwolone w s oprócz cyfr
None cyfry całkowite tylko element.
AllowDecimalPoint . i cyfry ułamkowe elementów.
AllowExponent Parametr s może również używać notacji wykładniczej. Ta flaga sama obsługuje wartości w postaci cyfr całkowitychEcyfr wykładniczych; Dodatkowe flagi są potrzebne do pomyślnego analizowania ciągów w notacji wykładniczej z takimi elementami jak znaki dodatnie lub ujemne i symbole punktów dziesiętnych.
AllowLeadingWhite Element ws na początku s.
AllowTrailingWhite Element ws na końcu s.
AllowLeadingSign Element podpisywania na początku .
AllowTrailingSign Element na końcu s.
AllowParentheses Znak element w postaci nawiasów otaczających wartość liczbową.
AllowThousands Element ,.
AllowCurrencySymbol Element $.
Currency Cały. Parametr s nie może reprezentować liczby szesnastkowej lub liczby w notacji wykładniczej.
Float Element ws na początku lub na końcu sznak na początku si . symbol. Parametr s może również używać notacji wykładniczej.
Number Elementy separatora ws, sign, tysięcy (), i dziesiętnego (.).
Any Wszystkie style, z wyjątkiem s nie mogą reprezentować liczby szesnastkowej.

Parametr provider jest implementacją IFormatProvider, taką jak obiekt NumberFormatInfo lub CultureInfo. Parametr provider dostarcza informacje specyficzne dla kultury używane w analizowaniu. Jeśli provider jest null lub nie można uzyskać obiektu NumberFormatInfo, używane są informacje o formacie bieżącej kultury.

Konwersja kończy się niepowodzeniem, jeśli parametr s jest null lub nie jest wartością liczbową, parametr provider nie zwraca obiektu NumberFormatInfo lub parametr style nie jest kombinacją flag bitowych z wyliczenia NumberStyles.

Zazwyczaj jeśli przekażesz metodę Double.TryParse ciąg utworzony przez wywołanie metody Double.ToString, zwracana jest oryginalna wartość Double. Jednak ze względu na utratę dokładności wartości mogą nie być równe. Ponadto próba przeanalizowanie reprezentacji ciągu Double.MinValue lub Double.MaxValue nie powiedzie się. W programach .NET Framework i .NET Core 2.2 i poprzednich wersjach zgłasza OverflowException. W wersji .NET Core 3.0 lub nowszej program zwraca Double.NegativeInfinity, jeśli próbujesz przeanalizować MinValue lub Double.PositiveInfinity, jeśli próbujesz przeanalizować MaxValue. Poniższy przykład zawiera ilustrację.

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.

W programach .NET Framework i .NET Core 2.2 i starszych wersjach, jeśli s jest poza zakresem typu danych Double, metoda Double.TryParse(String, NumberStyles, IFormatProvider, Double) zgłasza OverflowException.

W przypadku platformy .NET Core 3.0 i nowszych wersji nie jest zgłaszany wyjątek, gdy s jest poza zakresem typu danych Double. W większości przypadków metoda Double.TryParse(String, NumberStyles, IFormatProvider, Double) oblicza wynik Double.PositiveInfinity lub Double.NegativeInfinity. Istnieje jednak niewielki zestaw wartości, które są uważane za zbliżone do maksymalnej lub minimalnej wartości Double niż do dodatniej lub ujemnej nieskończoności. W takich przypadkach metoda oblicza wynik Double.MaxValue lub Double.MinValue.

Jeśli separator napotkany w parametrze s podczas operacji analizy, a odpowiednia waluta lub separatory liczbowe i separatory grup są takie same, operacja analizy zakłada, że separator jest separatorem dziesiętnym, a nie separatorem grup. Aby uzyskać więcej informacji na temat separatorów, zobacz CurrencyDecimalSeparator, NumberDecimalSeparator, CurrencyGroupSeparatori NumberGroupSeparator.

Zobacz też

Dotyczy