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

Nazwa Opis
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
Ź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.s

result
Double

Gdy ta metoda zwraca wartość , 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
Ź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, odpowiada wartości liczbowej lub symbolowi zawartemu w s parametrze, jeśli konwersja zakończyła się pomyślnie lub zero, jeśli konwersja nie powiodła się. Konwersja kończy się niepowodzeniem s , jeśli parametr jest null lub jest pusty. 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ść podana pierwotnie w result pliku 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
Ź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 zwróci wartość , zawiera zmiennoprzecinkową liczbę o podwójnej precyzji równoważną s parametrowi, jeśli konwersja zakończyła się pomyślnie lub zero, jeśli konwersja nie powiodła się. Konwersja kończy się niepowodzeniem, s jeśli parametr jest null lub Empty nie jest liczbą w prawidłowym formacie. Nie powiedzie się również w programie .NET Framework, jeśli s reprezentuje liczbę mniejszą niż Double.MinValue lub większą niż Double.MaxValue. Ten parametr jest przekazywany niezainicjowany; każda wartość podana pierwotnie w result pliku 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 TryParse(String, Double) metody , 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 Double.Parse(String) metody, zwracając wartość logiczną, 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 elementu FormatException w przypadku nieprawidłowego s i nie można go pomyślnie przeanalizować.

Parametr s może zawierać symbol , NumberFormatInfo.PositiveInfinitySymbollub NumberFormatInfo.NegativeInfinitySymbol bieżącej kulturyNumberFormatInfo.NaNSymbol. To porównanie ciągów jest bez uwzględniania wielkości liter w programie .NET Core 3.0 i nowszych wersjach, ale uwzględnia wielkość liter w poprzednich wersjach, w tym .NET Framework. Parametr s może być również ciągiem 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.
podpis 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 NumberStyles.Float flag 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 biały znak), które mogą być obecne w elemecie s, użyj Double.TryParse(String, NumberStyles, IFormatProvider, Double) przeciążenia metody.

Parametr s jest analizowany przy użyciu informacji o formatowaniu w obiekcie zainicjowanym NumberFormatInfo 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 Double.TryParse(String, NumberStyles, IFormatProvider, Double) przeciążenia metody.

Zazwyczaj, jeśli przekażesz Double.TryParse metodę ciąg utworzony przez wywołanie Double.ToString metody, zwracana jest oryginalna Double wartość. Jednak ze względu na utratę dokładności wartości mogą nie być równe. Ponadto próba przeanalizowania reprezentacji Double.MinValue ciągu lub Double.MaxValue nie powiedzie się w obie strony. W programie .NET Framework zgłaszany jest błąd OverflowException. W przypadku platformy .NET Core 3.0 lub nowszych wersji zostanie ona zwrócona Double.NegativeInfinity , jeśli próbujesz przeanalizować MinValueelement , lub Double.PositiveInfinity jeśli próbujesz przeanalizować MaxValueelement . 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.

Jeśli w programie .NET Framework s jest poza zakresem Double typu danych, TryParse(String, Double) metoda zgłasza błąd OverflowException.

W przypadku platformy .NET Core 3.0 i nowszych wersji żaden wyjątek nie jest zgłaszany, gdy s nie ma zakresu Double typu danych. W większości przypadków TryParse(String, Double) metoda 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
Ź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.utf8Text

result
Double

Po powrocie zawiera wynik pomyślnego analizowania utf8Text lub niezdefiniowanej wartości 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
Ź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.s

result
Double

Gdy ta metoda zwraca wartość , 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<Byte>, NumberStyles, IFormatProvider, Double)

Źródło:
Double.cs
Źródło:
Double.cs
Ź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 pliku utf8Text.

provider
IFormatProvider

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

result
Double

Po powrocie zawiera wynik pomyślnego analizowania utf8Text lub niezdefiniowanej wartości 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
Ź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ść zmiennoprzecinkową o podwójnej precyzji, odpowiada wartości liczbowej lub symbolowi zawartemu, 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 element 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
Ź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) = 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

Parametry

s
ReadOnlySpan<Char>

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

style
NumberStyles

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

provider
IFormatProvider

Obiekt, który dostarcza informacje o formatowaniu specyficznym dla kultury.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 elemencie s. Zawiera zero, jeśli konwersja nie powiodła się. Konwersja kończy się niepowodzeniem, jeśli s parametr to null, pusty zakres znaków lub 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ść podana pierwotnie w result pliku 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
Ź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 NumberStyles wartości wskazująca dozwolony format s. Typowa wartość do określenia jest Float połączona z elementem AllowThousands.

provider
IFormatProvider

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

result
Double

Gdy ta metoda zwraca wartość zmiennoprzecinkową o podwójnej precyzji, odpowiada wartości liczbowej lub symbolowi zawartemu w selemencie , 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 s parametr jest null lub Empty nie jest w formacie zgodnym z style, lub jeśli style nie jest prawidłową kombinacją NumberStyles stałych wyliczenia. Nie powiedzie się również w programie .NET Framework, jeśli s reprezentuje liczbę mniejszą niż SByte.MinValue lub większą niż SByte.MaxValue. Ten parametr jest przekazywany niezainicjowany; każda wartość podana pierwotnie w result pliku 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 AllowHexSpecifier zawiera wartość .

Przykłady

W poniższym przykładzie pokazano użycie Double.TryParse(String, NumberStyles, IFormatProvider, Double) metody 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 jest podobna TryParseParse(String, NumberStyles, IFormatProvider) do metody, z wyjątkiem tej metody nie zgłasza wyjątku, jeśli konwersja nie powiedzie się. Jeśli konwersja powiedzie się, zwracana wartość to true , a result parametr jest ustawiony na wynik konwersji. Jeśli konwersja zakończy się niepowodzeniem, zwracana wartość to false , a result parametr jest ustawiony na zero. Eliminuje to konieczność użycia obsługi wyjątków w celu przetestowania elementu FormatException w przypadku nieprawidłowego s i nie można go pomyślnie przeanalizować.

Parametr style definiuje dozwolony format parametru s dla operacji analizowania, która zakończy się powodzeniem. Musi to być kombinacja flag bitowych z NumberStyles wyliczenia. Następujące NumberStyles elementy członkowskie nie są obsługiwane:

Parametr s może zawierać NumberFormatInfo.PositiveInfinitySymbolsymbol , NumberFormatInfo.NegativeInfinitySymbollub NumberFormatInfo.NaNSymbol dla kultury wskazanej przez provider. To porównanie ciągów jest bez uwzględniania wielkości liter w programie .NET Core 3.0 i nowszych wersjach, ale uwzględnia wielkość liter w poprzednich wersjach, w tym .NET Framework. Ponadto w zależności od wartości styleparametr może s 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 NumberFormatInfo.CurrencyNegativePattern właściwości NumberFormatInfo.CurrencyPositivePattern lub NumberFormatInfo obiektu zwróconego przez metodę IFormatProvider.GetFormat parametru provider . Symbol waluty może pojawić się, s jeśli style zawiera flagę NumberStyles.AllowCurrencySymbol .
podpis 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ą służyć do wskazywania wartości ujemnej, s 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ę, s jeśli style zawiera flagę NumberStyles.AllowThousands .
. Symbol separatora dziesiętnego specyficznego dla kultury. Symbol dziesiętny bieżącej kultury może pojawić się, 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, 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 obiekcie s są ignorowane przez operację analizowania, niezależnie od wartości argumentu style .

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

Wartość NumberStyles Elementy dozwolone w s oprócz cyfr
None Tylko element cyfr całkowitych .
AllowDecimalPoint Elementy . i fractional-digits .
AllowExponent Parametr s może również używać notacji wykładniczej. Ta flaga sama obsługuje wartości w postaci cyfr całkowitychEwykładniczo-cyfrowych; 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 elementu s.
AllowTrailingWhite Element ws na końcu elementu s.
AllowLeadingSign Element sign na początku elementu s.
AllowTrailingSign Element sign na końcu elementu s.
AllowParentheses Element znaku w postaci nawiasów ujętą w wartość liczbową.
AllowThousands Element , .
AllowCurrencySymbol Element $ .
Currency Cały. Parametr s nie może reprezentować liczby szesnastkowej ani liczby w notacji wykładniczej.
Float Element ws na początku lub na końcu sznaku na początku selementu i symbolu . Parametr s może również używać notacji wykładniczej.
Number Elementy separatora , tysięcy (ws i separatora dziesiętnego (sign).
Any Wszystkie style, z wyjątkiem s nie mogą reprezentować liczby szesnastkowej.

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

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

Zazwyczaj, jeśli przekażesz Double.TryParse metodę ciąg utworzony przez wywołanie Double.ToString metody, zwracana jest oryginalna Double wartość. Jednak ze względu na utratę dokładności wartości mogą nie być równe. Ponadto próba przeanalizowania reprezentacji Double.MinValue ciągu lub Double.MaxValue nie powiedzie się w obie strony. W programie .NET Framework zgłaszany jest błąd OverflowException. W przypadku platformy .NET Core 3.0 lub nowszych wersji zostanie ona zwrócona Double.NegativeInfinity , jeśli próbujesz przeanalizować MinValueelement , lub Double.PositiveInfinity jeśli próbujesz przeanalizować MaxValueelement . 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.

Jeśli w programie .NET Framework s jest poza zakresem Double typu danych, Double.TryParse(String, NumberStyles, IFormatProvider, Double) metoda zgłasza błąd OverflowException.

W przypadku platformy .NET Core 3.0 i nowszych wersji żaden wyjątek nie jest zgłaszany, gdy s nie ma zakresu Double typu danych. W większości przypadków Double.TryParse(String, NumberStyles, IFormatProvider, Double) metoda 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 grupy. Aby uzyskać więcej informacji na temat separatorów, zobacz CurrencyDecimalSeparator, NumberDecimalSeparator, CurrencyGroupSeparatori NumberGroupSeparator.

Zobacz też

Dotyczy