Double.TryParse Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Konwertuje ciąg reprezentujący liczbę na odpowiadającą mu liczbę zmiennoprzecinkową podwójnej precyzji. Zwracana wartość wskazuje, czy konwersja powiodła się czy nie.
Przeciążenia
TryParse(ReadOnlySpan<Char>, IFormatProvider, Double) |
Próbuje przeanalizować zakres znaków w wartości. |
TryParse(ReadOnlySpan<Char>, Double) |
Konwertuje reprezentację zakresu liczby w określonym stylu i formacie specyficznym dla kultury na równoważność liczb zmiennoprzecinkowych o podwójnej precyzji. Zwracana wartość wskazuje, czy konwersja powiodła się czy nie. |
TryParse(String, Double) |
Konwertuje ciąg reprezentujący liczbę na odpowiadającą mu liczbę zmiennoprzecinkową podwójnej precyzji. Zwracana wartość wskazuje, czy konwersja powiodła się czy nie. |
TryParse(ReadOnlySpan<Byte>, IFormatProvider, Double) |
Próbuje przeanalizować zakres znaków UTF-8 w wartości. |
TryParse(String, IFormatProvider, Double) |
Próbuje przeanalizować ciąg w wartości. |
TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Double) |
Próbuje przeanalizować zakres znaków UTF-8 w wartości. |
TryParse(ReadOnlySpan<Byte>, Double) |
Próbuje przekonwertować zakres znaków UTF-8 zawierający reprezentację ciągu liczby na równoważną liczbę zmiennoprzecinkową o podwójnej precyzji. |
TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Double) |
Konwertuje zakres znaków zawierający reprezentację ciągu liczby w określonym stylu i formacie specyficznym dla kultury na równoważność liczb zmiennoprzecinkowych o podwójnej precyzji. Zwracana wartość wskazuje, czy konwersja powiodła się czy nie. |
TryParse(String, NumberStyles, IFormatProvider, Double) |
Konwertuje reprezentację ciągu liczby w określonym stylu i formacie specyficznym dla kultury na równoważność liczb zmiennoprzecinkowych o podwójnej precyzji. Zwracana wartość wskazuje, czy konwersja powiodła się czy nie. |
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ło niepowodzenie.
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.s
- result
- Double
Gdy ta metoda zwraca wartość , zawiera wynik pomyślnej analizy 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żność liczb zmiennoprzecinkowych o podwójnej precyzji. Zwracana wartość wskazuje, czy konwersja powiodła się czy nie.
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, który zawiera 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 s
parametrze, jeśli konwersja powiodła się lub zero, jeśli konwersja nie powiodła się. Konwersja kończy się niepowodzeniem s
, jeśli parametr jest null
pusty lub nie jest zgodny z formatem style
. Konwersja również kończy się niepowodzeniem, jeśli style
nie jest prawidłową kombinacją NumberStyles wyliczeń 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
pomyślnie przekonwertowano; 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ło niepowodzenie.
Dotyczy
TryParse(String, Double)
- Źródło:
- Double.cs
- Źródło:
- Double.cs
- Źródło:
- Double.cs
Konwertuje ciąg reprezentujący liczbę na odpowiadającą mu liczbę zmiennoprzecinkową podwójnej precyzji. Zwracana wartość wskazuje, czy konwersja powiodła się czy nie.
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ę, która ma zostać przekształcona.
- 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, s
jeśli parametr jest null
lub Empty nie jest liczbą w prawidłowym formacie. Niepowodzenie 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
pomyślnie została 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. Zakłada się, ż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ło niepowodzenie.
To przeciążenie różni się od Double.Parse(String) metody, zwracając wartość logiczną, która wskazuje, czy operacja analizy powiodła się zamiast zwracać przeanalizowaną wartość liczbową. Eliminuje 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ć wartości NumberFormatInfo.PositiveInfinitySymbol, , ( NumberFormatInfo.NegativeInfinitySymbolNumberFormatInfo.NaNSymbol w przypadku porównania ciągów jest uwzględniana wielkość liter) lub ciąg formularza:
[ws] [podpis] [cyfry całkowite,]cyfry-całkowite[.[ ułamkowe cyfry]][e[znak]cyfry wykładnicze][ws]
Elementy w nawiasach kwadratowych są opcjonalne. W tabeli poniżej opisano każdy element.
Element | Opis |
---|---|
Ws | Ciąg znaków spacji. |
sign | 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 w przypadku cyfr ułamkowych. |
, | Symbol separatora grupy specyficzny dla kultury. |
. | Symbol dziesiętny specyficzny dla kultury. |
cyfry-ułamkowe | Seria znaków liczbowych z zakresu od 0 do 9 określająca część ułamkową liczby. |
E | Wielka lub mała litera "e", która 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 biały znak i separatory tysięczne są dozwolone, ale symbole walut nie. Aby jawnie zdefiniować elementy (takie jak symbole waluty, separatory tysięcy i białe znaki), które mogą być obecne w s
elemecie , 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.
Zwykle, jeśli przekazujesz Double.TryParse metodę ciąg, który jest tworzony przez wywołanie Double.ToString metody , zwracana jest oryginalna Double wartość. Jednak ze względu na utratę precyzji wartości mogą być różne. Ponadto próba przeanalizowana reprezentacji ciągu lub Double.MaxValue nie powiodła się, aby przeanalizować reprezentację Double.MinValue ciągu. W programach .NET Framework i .NET Core 2.2 i poprzednich wersjach zgłaszany jest błąd OverflowException. W programie .NET Core 3.0 i nowszych wersjach jest zwracana Double.NegativeInfinity w przypadku próby analizy MinValue lub Double.PositiveInfinity próby analizy MaxValue. Poniższy przykład stanowi 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 Double typu danych, TryParse(String, Double) metoda zgłasza błąd OverflowException.
Na platformie .NET Core 3.0 i nowszych wersjach nie jest zgłaszany wyjątek, gdy s
jest poza zakresem 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 wartości maksymalnych lub minimalnych 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ż
- Parse(String)
- ToString()
- Analizowanie ciągów liczbowych na platformie .NET
- Przykład: .NET Core WinForms Formatting Utility (C#)
- Przykład: .NET Core WinForms Formatting Utility (Visual Basic)
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 dotyczące utf8Text
elementu .
- result
- Double
Po powrocie zawiera wynik pomyślnego analizowania utf8Text
lub niezdefiniowanej wartości po awarii.
Zwraca
true
jeśli utf8Text
został pomyślnie przeanalizowany; w przeciwnym razie false
.
Dotyczy
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ść.
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 dotyczące s
elementu .
- result
- Double
Gdy ta metoda zostanie zwrócona, zawiera wynik pomyślnego analizowania s
lub niezdefiniowanej wartości po awarii.
Zwraca
true
jeśli s
został pomyślnie przeanalizowany; 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 obiekcie utf8Text
.
- provider
- IFormatProvider
Obiekt, który udostępnia informacje o formatowaniu specyficznym dla kultury dotyczące utf8Text
elementu .
- result
- Double
Po powrocie zawiera wynik pomyślnego analizowania utf8Text
lub niezdefiniowanej wartości po awarii.
Zwraca
true
jeśli utf8Text
został pomyślnie przeanalizowany; 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żną liczbę zmiennoprzecinkową 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 zawierający liczbę do przekonwertowania.
- result
- Double
Gdy ta metoda zostanie zwrócona, zawiera liczbę zmiennoprzecinkową o podwójnej precyzji równoważną wartości liczbowej lub symbolu zawartego, 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 element utf8Text
jest Empty lub nie jest w prawidłowym formacie. Ten parametr jest przekazywany jako niezainicjowany; każda wartość pierwotnie dostarczona w wyniku zostanie zastąpiona.
Zwraca
true
jeśli utf8Text
pomyślnie została 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 reprezentację ciągu liczby w określonym stylu i formacie specyficznym dla kultury na równoważność liczb zmiennoprzecinkowych o podwójnej precyzji. Zwracana wartość wskazuje, czy konwersja powiodła się czy nie.
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 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
Obiekt, który dostarcza informacje o formatowaniu specyficznym dla kultury.s
- result
- Double
Gdy ta metoda zwróci wartość i jeśli konwersja zakończyła się pomyślnie, zawiera zmiennoprzecinkową liczbę o podwójnej precyzji równoważną wartości liczbowej lub symbolu zawartego w s
elemencie . Zawiera zero, jeśli konwersja nie powiodła się. Konwersja kończy się niepowodzeniem, jeśli s
parametr ma null
wartość , pusty zakres znaków lub nie liczbę w formacie zgodnym z parametrem 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
to PositiveInfinity. Ten parametr jest przekazywany jako niezainicjowany; każda wartość pierwotnie dostarczona w pliku result
zostanie zastąpiona.
Zwraca
true
jeśli s
pomyślnie została przekonwertowana; w przeciwnym razie false
.
Uwagi
W programie .NET Core 3.0 i nowszych wartości, które są zbyt duże do reprezentowania, są zaokrąglane do PositiveInfinity lub NegativeInfinity zgodnie z wymaganiami specyfikacji IEEE 754. W poprzednich wersjach, w tym .NET Framework, analizowanie wartości, która była zbyt duża, aby reprezentować wynik awarii.
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żność liczb zmiennoprzecinkowych o podwójnej precyzji. Zwracana wartość wskazuje, czy konwersja powiodła się czy nie.
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ę, która ma zostać przekształcona.
- 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 o formatowaniu specyficznym dla kultury dotyczące s
elementu .
- result
- Double
Gdy ta metoda zostanie zwrócona, zawiera zmiennoprzecinkową liczbę o podwójnej precyzji równoważną wartości liczbowej lub symbolu zawartej w s
metodzie , 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 parametrem style
, lub jeśli style
nie jest prawidłową kombinacją NumberStyles stałych wyliczenia. Kończy się to również niepowodzeniem 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 jako niezainicjowany; każda wartość pierwotnie dostarczona w pliku result
zostanie zastąpiona.
Zwraca
true
jeśli s
pomyślnie przekonwertowano; w przeciwnym razie . false
Wyjątki
Przykłady
W poniższym przykładzie pokazano użycie Double.TryParse(String, NumberStyles, IFormatProvider, Double) metody do analizowania ciągu reprezentacji liczb, które mają określony styl i są sformatowane 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 i nowszych wartości, które są zbyt duże do reprezentowania, są zaokrąglane do PositiveInfinity lub NegativeInfinity zgodnie z wymaganiami specyfikacji IEEE 754. W poprzednich wersjach, w tym .NET Framework, analizowanie wartości, która była zbyt duża, aby reprezentować wynik awarii.
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 do testowania dla FormatException zdarzenia, które s
jest nieprawidłowe i nie można go pomyślnie przeanalizować.
Parametr style
definiuje dozwolony format parametru s
dla operacji analizy, która zakończy się powodzeniem. Musi być kombinacją flag bitowych z wyliczenia NumberStyles . Następujące NumberStyles elementy członkowskie nie są obsługiwane:
Parametr s
może zawierać NumberFormatInfo.PositiveInfinitySymbolwartość , NumberFormatInfo.NegativeInfinitySymbollub NumberFormatInfo.NaNSymbol dla kultury wskazanej przez provider
. Ponadto w zależności od wartości style
parametru s
parametr może zawierać następujące elementy:
[ws] [$] [znak] [cyfry całkowite,]cyfry całkowite[.fractional-digits][e[sign]exponential-digits][ws]
Elementy w nawiasach kwadratowych ([ i ]) są opcjonalne. W tabeli poniżej opisano każdy element.
Element | Opis |
---|---|
Ws | Opcjonalny odstęp. 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 specyficzny dla kultury. Jego pozycja w ciągu jest definiowana przez NumberFormatInfo.CurrencyNegativePattern właściwości NumberFormatInfo lub NumberFormatInfo.CurrencyPositivePattern obiektu zwróconego przez IFormatProvider.GetFormat metodę parametru provider . Symbol waluty może pojawić się, s jeśli style zawiera flagę NumberStyles.AllowCurrencySymbol . |
sign | 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 | Ciąg cyfr od 0 do 9, które określają jej część całkowitą. Cyfry całkowite mogą być nieobecne w przypadku cyfr ułamkowych. |
, | 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 dziesiętny specyficzny dla kultury. Symbol punktu dziesiętnego bieżącej kultury może pojawić się, s jeśli style zawiera flagę NumberStyles.AllowDecimalPoint . |
cyfry-ułamkowe | Ciąg cyfr od 0 do 9, które określają 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 | Ciąg cyfr od 0 do 9, które określają wykładnik potęgi. |
Uwaga
Wszelkie znaki zakończenia NUL (U+0000) w obiekcie s
są ignorowane przez operację analizowania, niezależnie od wartości argumentu style
.
Ciąg z cyframi (odpowiadający NumberStyles.None stylowi) zawsze analizuje się pomyślnie, jeśli znajduje się on w zakresie Double typu. Pozostałe System.Globalization.NumberStyles elementy członkowskie kontrolują, 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ść wyliczenia NumberStyles | Dodatkowe (poza cyframi) elementy dozwolone w parametrze s |
---|---|
None | Tylko element całkowitocyfrowy . |
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 znaku na początku elementu s . |
AllowTrailingSign | Element znaku na końcu elementu s . |
AllowParentheses | Element znaku w postaci nawiasów otaczających wartość liczbową. |
AllowThousands | Element , . |
AllowCurrencySymbol | Element $ . |
Currency | Wszystkie. Parametr s nie może reprezentować liczby szesnastkowej ani liczby w notacji wykładniczej. |
Float | Element ws na początku lub na końcu s znaku na początku elementu s i symbolu . Parametr s może również używać notacji wykładniczej. |
Number | ws Elementy separatora , sign tysięcy (,) i separatora 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 podczas analizowania. Jeśli provider
nie null
można uzyskać obiektu lub NumberFormatInfo nie można uzyskać informacji o formacie dla bieżącej kultury.
Konwersja nie powiedzie się, 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.
Zwykle, jeśli przekazujesz Double.TryParse metodę ciąg, który jest tworzony przez wywołanie Double.ToString metody , zwracana jest oryginalna Double wartość. Jednak ze względu na utratę precyzji wartości mogą być różne. Ponadto próba przeanalizowana reprezentacji ciągu lub Double.MaxValue nie powiodła się, aby przeanalizować reprezentację Double.MinValue ciągu. W programach .NET Framework i .NET Core 2.2 i poprzednich wersjach zgłaszany jest błąd OverflowException. W programie .NET Core 3.0 i nowszych wersjach jest zwracana Double.NegativeInfinity w przypadku próby analizy MinValue lub Double.PositiveInfinity próby analizy MaxValue. Poniższy przykład stanowi 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 Double typu danych, Double.TryParse(String, NumberStyles, IFormatProvider, Double) metoda zgłasza błąd OverflowException.
Na platformie .NET Core 3.0 i nowszych wersjach nie jest zgłaszany wyjątek, gdy s
jest poza zakresem 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 wartości maksymalnych lub minimalnych 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
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla