Double.TryParse Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Převede řetězcové vyjádření čísla na jeho ekvivalentní typ dvojité přesnosti s plovoucí řádovou čárkou. Vrácená hodnota označuje, zda byl převod úspěšný, či nikoli.
Přetížení
TryParse(ReadOnlySpan<Char>, IFormatProvider, Double) |
Pokusí se parsovat rozsah znaků na hodnotu. |
TryParse(ReadOnlySpan<Char>, Double) |
Převede reprezentaci rozsahu čísla v zadaném stylu a formátu specifickém pro jazykovou verzi na jeho ekvivalent čísla s plovoucí desetinou čárkou s dvojitou přesností. Vrácená hodnota označuje, zda byl převod úspěšný, či nikoli. |
TryParse(String, Double) |
Převede řetězcové vyjádření čísla na jeho ekvivalentní typ dvojité přesnosti s plovoucí řádovou čárkou. Vrácená hodnota označuje, zda byl převod úspěšný, či nikoli. |
TryParse(ReadOnlySpan<Byte>, IFormatProvider, Double) |
Pokusí se parsovat rozsah znaků UTF-8 na hodnotu. |
TryParse(String, IFormatProvider, Double) |
Pokusí se parsovat řetězec na hodnotu. |
TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Double) |
Pokusí se parsovat rozsah znaků UTF-8 na hodnotu. |
TryParse(ReadOnlySpan<Byte>, Double) |
Pokusí se převést znakový rozsah UTF-8 obsahující řetězcové vyjádření čísla na jeho ekvivalent čísla s plovoucí desetinnou čárkou s dvojitou přesností. |
TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Double) |
Převede znakový rozsah obsahující řetězcovou reprezentaci čísla v zadaném stylu a formátu specifickém pro jazykovou verzi na jeho ekvivalent čísla s plovoucí desetinnou čárkou s dvojitou přesností. Vrácená hodnota označuje, zda byl převod úspěšný, či nikoli. |
TryParse(String, NumberStyles, IFormatProvider, Double) |
Převede řetězcové vyjádření čísla v zadaném stylu a formátu specifickém pro jazykovou verzi na jeho ekvivalent čísla s plovoucí desetinnou čárkou s dvojitou přesností. Vrácená hodnota označuje, zda byl převod úspěšný, či nikoli. |
Poznámky
V .NET Core 3.0 a novějších verzích se hodnoty, které jsou pro reprezentaci příliš velké, zaokrouhlují na PositiveInfinity nebo NegativeInfinity podle požadavků specifikace IEEE 754. V předchozích verzích, včetně rozhraní .NET Framework, analýza hodnoty, která byla příliš velká na to, aby reprezentovala, způsobila selhání.
TryParse(ReadOnlySpan<Char>, IFormatProvider, Double)
- Zdroj:
- Double.cs
- Zdroj:
- Double.cs
- Zdroj:
- Double.cs
Pokusí se parsovat rozsah znaků na hodnotu.
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>
Rozsah znaků, které se mají analyzovat.
- provider
- IFormatProvider
Objekt, který poskytuje informace o formátování specifické pro s
jazykovou verzi.
- result
- Double
Když tato metoda vrátí, obsahuje výsledek úspěšné analýzy s
nebo nedefinovanou hodnotu při selhání.
Návraty
true
pokud s
byl úspěšně parsován, jinak hodnota false
.
Platí pro
TryParse(ReadOnlySpan<Char>, Double)
- Zdroj:
- Double.cs
- Zdroj:
- Double.cs
- Zdroj:
- Double.cs
Převede reprezentaci rozsahu čísla v zadaném stylu a formátu specifickém pro jazykovou verzi na jeho ekvivalent čísla s plovoucí desetinou čárkou s dvojitou přesností. Vrácená hodnota označuje, zda byl převod úspěšný, či nikoli.
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>
Znakové rozpětí, které obsahuje řetězcové vyjádření čísla, které se má převést.
- result
- Double
Když tato metoda vrátí, obsahuje číselný ekvivalent dvojité přesnosti s plovoucí desetinou čárkou číselné hodnoty nebo symbolu obsaženého v s
parametru, pokud byl převod úspěšný, nebo nulu, pokud se převod nezdařil. Převod se nezdaří, pokud s
je null
parametr prázdný nebo není ve formátu kompatibilním s style
. Převod se také nezdaří, pokud style
není platná kombinace NumberStyles výčtových konstant. Pokud s
je platné číslo menší než Double.MinValue, result
je NegativeInfinity. Pokud s
je platné číslo větší než Double.MaxValue, result
je PositiveInfinity. Tento parametr je předán neinicializován; jakákoli hodnota původně zadaná v result
bude přepsána.
Návraty
true
pokud s
byl úspěšně převeden, jinak hodnota false
.
Poznámky
V .NET Core 3.0 a novějších verzích se hodnoty, které jsou pro reprezentaci příliš velké, zaokrouhlují na PositiveInfinity nebo NegativeInfinity podle požadavků specifikace IEEE 754. V předchozích verzích, včetně rozhraní .NET Framework, analýza hodnoty, která byla příliš velká na reprezentaci, způsobila chybu.
Platí pro
TryParse(String, Double)
- Zdroj:
- Double.cs
- Zdroj:
- Double.cs
- Zdroj:
- Double.cs
Převede řetězcové vyjádření čísla na jeho ekvivalentní typ dvojité přesnosti s plovoucí řádovou čárkou. Vrácená hodnota označuje, zda byl převod úspěšný, či nikoli.
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
Řetězec obsahující číslo k převedení.
- result
- Double
Když tato metoda vrátí, obsahuje číselný ekvivalent dvojité přesnosti s plovoucí desetinou čárkou parametru s
, pokud byl převod úspěšný, nebo nulu, pokud se převod nezdařil. Převod se nezdaří, s
pokud parametr je null
nebo Empty není číslo v platném formátu. Selže také v rozhraní .NET Framework a .NET Core 2.2 a starších verzích, pokud s
představuje číslo menší než Double.MinValue nebo větší než Double.MaxValue. Tento parametr je předán neinicializován; jakákoli hodnota původně zadaná v result
bude přepsána.
Návraty
true
pokud s
byl převod úspěšně, v opačném případě false
.
Příklady
Následující příklad používá metodu TryParse(String, Double) k převodu řetězcových reprezentací číselných hodnot na Double hodnoty. Předpokládá, že en-US je aktuální jazyková verze.
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'.
Poznámky
V .NET Core 3.0 a novějších verzích se hodnoty, které jsou pro reprezentaci příliš velké, zaokrouhlují na PositiveInfinity nebo NegativeInfinity podle požadavků specifikace IEEE 754. V předchozích verzích, včetně rozhraní .NET Framework, analýza hodnoty, která byla příliš velká na reprezentaci, způsobila chybu.
Toto přetížení se liší od Double.Parse(String) metody vrácením logické hodnoty, která označuje, zda byla operace parsování úspěšná místo vrácení analyzované číselné hodnoty. Eliminuje potřebu použití zpracování výjimek k testování objektu FormatException v případě, že s
je neplatná a nelze ji úspěšně analyzovat.
Parametr s
může obsahovat aktuální jazykovou NumberFormatInfo.PositiveInfinitySymbolverzi , NumberFormatInfo.NegativeInfinitySymbolNumberFormatInfo.NaNSymbol (při porovnání řetězců se rozlišují malá a velká písmena) nebo řetězec ve formátu :
[ws] [sign] [integral-digits,]integral-digits[.[ fractional-digits]][e[sign]exponential-digits][ws]
Prvky v hranatých závorkách jsou volitelné. Následující tabulka popisuje jednotlivé prvky.
Element | Popis |
---|---|
Ws | Posloupnost znaků mezer. |
sign | Symbol záporného znaménka nebo symbol kladného znaménka. |
číslice-základu | Řada číselných znaků v rozsahu od 0 do 9, které určují nedílnou část čísla. Číslice základu nemusí být uvedeny, pokud jsou uvedeny desetinné číslice. |
, | Symbol oddělovače skupin, specifický pro jazykovou verzi. |
. | Symbol desetinné čárky specifický pro jazykovou verzi. |
desetinné-číslice | Řada číselných znaků od 0 do 9, které určují zlomkovou část čísla. |
E | Velké nebo malé písmeno "e", které označuje exponenciální (vědecký) zápis. |
číslice-exponentu | Řada číselných znaků od 0 do 9, které určují exponent. |
Další informace o formátech čísel najdete v tématu Typy formátování.
Parametr je s
interpretován pomocí kombinace NumberStyles.Float příznaků a NumberStyles.AllowThousands . To znamená, že mezery a oddělovače tisíců jsou povoleny, ale symboly měny nikoli. Pokud chcete explicitně definovat prvky (například symboly měny, oddělovače tisíců a prázdné znaky), které se můžou vyskytovat v s
objektu Double.TryParse(String, NumberStyles, IFormatProvider, Double) , použijte přetížení metody .
Parametr s
je analyzován pomocí informací o formátování v objektu NumberFormatInfo , který je inicializován pro aktuální jazykovou verzi systému. Další informace naleznete v tématu NumberFormatInfo.CurrentInfo. Chcete-li analyzovat řetězec pomocí informací o formátování některé jiné jazykové verze, použijte Double.TryParse(String, NumberStyles, IFormatProvider, Double) přetížení metody.
Obvykle, pokud předáte Double.TryParse metodě řetězec, který je vytvořen voláním Double.ToString metody, je vrácena původní Double hodnota. Z důvodu ztráty přesnosti nemusí být hodnoty stejné. Kromě toho pokus o parsování řetězcové reprezentace nebo Double.MinValueDouble.MaxValue selhání odezvy. V rozhraní .NET Framework a .NET Core 2.2 a předchozích verzích vyvolá .OverflowException V .NET Core 3.0 a novějších verzích se vrátí Double.NegativeInfinity , pokud se pokusíte parsovat MinValue nebo Double.PositiveInfinity pokud se pokusíte parsovat MaxValue. V následujícím příkladu je uvedena ukázka.
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.
Pokud je v rozhraní .NET Framework a .NET Core 2.2 a starších verzích s
mimo rozsah datového Double typu, TryParse(String, Double) metoda vyvolá .OverflowException
V .NET Core 3.0 a novějších verzích se nevyvolá žádná výjimka, pokud s
je mimo rozsah datového Double typu. Ve většině případů TryParse(String, Double) metoda vypočítá výsledek nebo Double.PositiveInfinityDouble.NegativeInfinity. Existuje však malá množina hodnot, které jsou považovány za blíže maximální nebo minimální hodnotě Double než kladnému nebo zápornému nekonečnu. V těchto případech metoda vypočítá výsledek nebo Double.MaxValueDouble.MinValue.
Pokud je v parametru s
během operace analýzy zjištěn oddělovač a oddělovače desetinných míst a oddělovače skupin jsou stejné, předpokládá se, že oddělovač je oddělovač desetinných míst, nikoli oddělovač skupin. Další informace o oddělovacích najdete v tématu CurrencyDecimalSeparator, NumberDecimalSeparator, CurrencyGroupSeparatora NumberGroupSeparator.
Viz také
- Parse(String)
- ToString()
- Analýza číselných řetězců v .NET
- Ukázka: .NET Core WinForms Formating Utility (C#)
- Ukázka: .NET Core WinForms Formating Utility (Visual Basic)
Platí pro
TryParse(ReadOnlySpan<Byte>, IFormatProvider, Double)
- Zdroj:
- Double.cs
- Zdroj:
- Double.cs
Pokusí se parsovat rozsah znaků UTF-8 na hodnotu.
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>
Rozsah znaků UTF-8, které se mají analyzovat.
- provider
- IFormatProvider
Objekt, který poskytuje informace o formátování specifické pro jazykovou verzi .utf8Text
- result
- Double
Při vrácení obsahuje výsledek úspěšné analýzy utf8Text
nebo nedefinovanou hodnotu při selhání.
Návraty
true
pokud utf8Text
byl úspěšně parsován, v opačném případě . false
Platí pro
TryParse(String, IFormatProvider, Double)
- Zdroj:
- Double.cs
- Zdroj:
- Double.cs
- Zdroj:
- Double.cs
Pokusí se parsovat řetězec na hodnotu.
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
Řetězec, který chcete analyzovat.
- provider
- IFormatProvider
Objekt, který poskytuje informace o formátování specifické pro jazykovou verzi .s
- result
- Double
Když se tato metoda vrátí, obsahuje výsledek úspěšné analýzy s
nebo nedefinovanou hodnotu při selhání.
Návraty
true
pokud s
byl úspěšně parsován, v opačném případě . false
Platí pro
TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Double)
- Zdroj:
- Double.cs
- Zdroj:
- Double.cs
Pokusí se parsovat rozsah znaků UTF-8 na hodnotu.
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>
Rozsah znaků UTF-8, které se mají analyzovat.
- style
- NumberStyles
Bitové kombinace stylů čísel, které se můžou vyskytovat v nástroji utf8Text
.
- provider
- IFormatProvider
Objekt, který poskytuje informace o formátování specifické pro jazykovou verzi .utf8Text
- result
- Double
Při vrácení obsahuje výsledek úspěšné analýzy utf8Text
nebo nedefinovanou hodnotu při selhání.
Návraty
true
pokud utf8Text
byl úspěšně parsován, v opačném případě . false
Platí pro
TryParse(ReadOnlySpan<Byte>, Double)
- Zdroj:
- Double.cs
- Zdroj:
- Double.cs
Pokusí se převést znakový rozsah UTF-8 obsahující řetězcovou reprezentaci čísla na jeho ekvivalent čísla s plovoucí desetinnou čárkou s dvojitou přesností.
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>
Rozsah znaků UTF-8 jen pro čtení, který obsahuje číslo, které se má převést.
- result
- Double
Když se tato metoda vrátí, obsahuje číselnou hodnotu s plovoucí desetinou čárkou s dvojitou přesností číselnou hodnotu nebo symbol obsažený v případě úspěšného převodu nebo nula, utf8Text
pokud převod selhal. Převod selže, utf8Text
pokud je Empty nebo není v platném formátu. Tento parametr je předán neinicializován; jakákoli hodnota původně zadaná ve výsledku bude přepsána.
Návraty
true
pokud utf8Text
byl převod úspěšně, v opačném případě false
.
Platí pro
TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Double)
- Zdroj:
- Double.cs
- Zdroj:
- Double.cs
- Zdroj:
- Double.cs
Převede znakový rozsah obsahující řetězcovou reprezentaci čísla v zadaném stylu a formátu specifickém pro jazykovou verzi na jeho ekvivalent čísla s plovoucí desetinnou čárkou s dvojitou přesností. Vrácená hodnota označuje, zda byl převod úspěšný, či nikoli.
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>
Rozsah znaků jen pro čtení, který obsahuje číslo, které se má převést.
- style
- NumberStyles
Bitová kombinace NumberStyles hodnot, která označuje povolený formát .s
Typická hodnota, která se má zadat, je Float kombinována s AllowThousandshodnotou .
- provider
- IFormatProvider
Objekt, který poskytuje informace o formátování specifické pro jazykovou verzi .s
- result
- Double
Když tato metoda vrátí a pokud převod proběhl úspěšně, obsahuje číselný ekvivalent s plovoucí desetinou čárkou s dvojitou přesností číselné hodnoty nebo symbolu obsaženého v s
souboru . Pokud převod selhal, obsahuje nulu. Převod se nezdaří, pokud s
je null
parametr , prázdný znakový rozsah nebo číslo ve formátu kompatibilním s style
. Pokud s
je platné číslo menší než Double.MinValue, result
je NegativeInfinity. Pokud s
je platné číslo větší než Double.MaxValue, result
je PositiveInfinity. Tento parametr je předán neinicializován; jakákoli hodnota původně zadaná v result
se přepíše.
Návraty
true
pokud s
byl převod úspěšně, v opačném případě false
.
Poznámky
V .NET Core 3.0 a novějších verzích se hodnoty, které jsou pro reprezentaci příliš velké, zaokrouhlují na PositiveInfinity nebo NegativeInfinity podle požadavků specifikace IEEE 754. V předchozích verzích, včetně rozhraní .NET Framework, analýza hodnoty, která byla příliš velká na to, aby reprezentovala, způsobila selhání.
Platí pro
TryParse(String, NumberStyles, IFormatProvider, Double)
- Zdroj:
- Double.cs
- Zdroj:
- Double.cs
- Zdroj:
- Double.cs
Převede řetězcovou reprezentaci čísla v zadaném stylu a formátu specifickém pro jazykovou verzi na jeho ekvivalent čísla s plovoucí desetinnou čárkou s dvojitou přesností. Vrácená hodnota označuje, zda byl převod úspěšný, či nikoli.
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
Řetězec obsahující číslo k převedení.
- style
- NumberStyles
Bitová kombinace NumberStyles hodnot, která označuje povolený formát .s
Typická hodnota, která se má zadat, je Float kombinována s AllowThousandshodnotou .
- provider
- IFormatProvider
Objekt IFormatProvider , který poskytuje informace o formátování specifické pro s
jazykovou verzi .
- result
- Double
Když se tato metoda vrátí, obsahuje číselnou hodnotu s plovoucí desetinou čárkou s dvojitou přesností číselnou hodnotu nebo symbol obsažený v , pokud převod proběhl úspěšně, nebo nula, s
pokud převod selhal. Převod selže, pokud s
parametr je null
nebo Empty není ve formátu kompatibilním s style
, nebo pokud style
není platnou kombinací konstant výčtu NumberStyles . Selže také v rozhraní .NET Framework nebo .NET Core 2.2 a starších verzích, pokud s
představuje číslo menší než SByte.MinValue nebo větší než SByte.MaxValue. Tento parametr je předán neinicializován; jakákoli hodnota původně zadaná v result
se přepíše.
Návraty
true
pokud s
byl převod úspěšně, v opačném případě false
.
Výjimky
Příklady
Následující příklad ukazuje použití Double.TryParse(String, NumberStyles, IFormatProvider, Double) metody k analýze řetězcové reprezentace čísel, které mají určitý styl a jsou formátovány pomocí konvencí konkrétní jazykové verze.
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'.
Poznámky
V .NET Core 3.0 a novějších verzích se hodnoty, které jsou pro reprezentaci příliš velké, zaokrouhlují na PositiveInfinity nebo NegativeInfinity podle požadavků specifikace IEEE 754. V předchozích verzích, včetně rozhraní .NET Framework, analýza hodnoty, která byla příliš velká na to, aby reprezentovala, způsobila selhání.
Metoda TryParse je podobná Parse(String, NumberStyles, IFormatProvider) metodě, s tím rozdílem, že tato metoda nevyvolá výjimku, pokud převod selže. Pokud převod proběhne úspěšně, vrátí se hodnota true
a result
parametr se nastaví na výsledek převodu. Pokud převod selže, návratová hodnota je false
a result
parametr je nastavený na nulu. Tím se eliminuje nutnost použít zpracování výjimek k testování pro FormatException objekt v případě, že s
je neplatný a nelze ho úspěšně analyzovat.
Parametr style
definuje povolený formát parametru s
, aby operace analýzy byla úspěšná. Musí se jednat o kombinaci bitových příznaků z výčtu NumberStyles . Následující NumberStyles členové nejsou podporováni:
Parametr s
může obsahovat NumberFormatInfo.PositiveInfinitySymbol, NumberFormatInfo.NegativeInfinitySymbolnebo NumberFormatInfo.NaNSymbol pro jazykovou verzi označenou parametrem provider
. Kromě toho může parametr v závislosti na hodnotě style
s
parametru obsahovat následující prvky:
[ws] [$] [sign] [integral-digits,]integral-digits[.fractional-digits][e[sign]exponential-digits][ws]
Prvky v hranatých závorkách ([ a ]) jsou volitelné. Následující tabulka popisuje jednotlivé prvky.
Element | Popis |
---|---|
Ws | Volitelné prázdné místo. Pokud příznak obsahujeNumberStyles.AllowLeadingWhite, může se na začátku s style zobrazit prázdné znaky. Pokud příznak obsahujeNumberStyles.AllowTrailingWhite, může se zobrazit na konci.s style |
$ | Symbol měny pro konkrétní jazykovou verzi. Jeho pozice v řetězci je definována vlastnostmi NumberFormatInfo.CurrencyNegativePattern nebo NumberFormatInfo.CurrencyPositivePattern objektu NumberFormatInfo vráceným metodou IFormatProvider.GetFormat parametru provider . Symbol měny se může zobrazit v s , pokud style obsahuje NumberStyles.AllowCurrencySymbol příznak. |
sign | Nepovinný znak. Znaménko se může zobrazit na začátku, pokud příznak obsahujeNumberStyles.AllowLeadingSign, a může se zobrazit na konci, s pokud style příznak obsahujeNumberStyles.AllowTrailingSign.style s Závorky lze v s použít k označení záporné hodnoty, pokud style obsahuje NumberStyles.AllowParentheses příznak. |
číslice-základu | Řada číslic od 0 do 9, které určují základní část čísla. Číslice základu nemusí být uvedeny, pokud jsou uvedeny desetinné číslice. |
, | Symbol oddělovače tisíců, specifický pro jazykovou verzi. Symbol oddělovače tisíců aktuální jazykové verze se může zobrazit v s , pokud style obsahuje NumberStyles.AllowThousands příznak. |
. | Symbol desetinné čárky specifický pro jazykovou verzi. Symbol desetinné čárky aktuální jazykové verze se může zobrazit v s , pokud style obsahuje NumberStyles.AllowDecimalPoint příznak. |
desetinné-číslice | Řada číslic od 0 do 9, které určují desetinnou část čísla. Desetinné číslice se můžou zobrazit v s , pokud style obsahuje NumberStyles.AllowDecimalPoint příznak. |
E | Znak e nebo E, který označuje, že s může představovat číslo pomocí exponenciálního zápisu. Parametr s může představovat číslo v exponenciálním zápisu, pokud styl obsahuje NumberStyles.AllowExponent příznak. |
číslice-exponentu | Řada číslic od 0 do 9, které určují exponent. |
Poznámka
Operace analýzy ignoruje všechny ukončující ZNAKY NUL (U+0000) bez s
ohledu na hodnotu argumentu style
.
Řetězec pouze s číslicemi (který odpovídá NumberStyles.None stylu) se vždy úspěšně analyzuje, pokud je v rozsahu Double typu. Zbývající System.Globalization.NumberStyles členové ovládací prvky, které mohou být, ale nejsou nutné, aby byly přítomny ve vstupním řetězci. Následující tabulka uvádí, jak jednotlivé NumberStyles příznaky ovlivňují prvky, které mohou být přítomny v nástroji s
.
Hodnota NumberStyles | Prvky, které jsou povoleny v s, kromě číslic |
---|---|
None | Pouze prvek celočíselné číslice . |
AllowDecimalPoint | Elementy . a desetinné číslice . |
AllowExponent | Parametr s může také použít exponenciální notaci. Tento příznak sám o sobě podporuje hodnoty ve formě integrálních číslicEexponenciálních číslic; K úspěšné parsování řetězců v exponenciálním zápisu s prvky, jako jsou kladná nebo záporná znaménka a symboly desetinné čárky, jsou potřeba další příznaky. |
AllowLeadingWhite | Element ws na začátku souboru s . |
AllowTrailingWhite | Element ws na konci souboru s . |
AllowLeadingSign | Element sign na začátku objektu s . |
AllowTrailingSign | Element sign na konci objektu s . |
AllowParentheses | Element sign ve formě závorek ohraničující číselnou hodnotu. |
AllowThousands | Element , |
AllowCurrencySymbol | Element $ . |
Currency | Všechny. Parametr s nemůže představovat šestnáctkové číslo nebo číslo v exponenciálním zápisu. |
Float | Element ws na začátku nebo na konci znakus na začátku znaku s a symbolu . Parametr s může také použít exponenciální notaci. |
Number | Oddělovač ws tisíců (,) a desetinná čárka (.) sign |
Any | Všechny styly s výjimkou s nemohou představovat šestnáctkové číslo. |
Parametr provider
je implementace, například objekt nebo NumberFormatInfoCultureInfo.IFormatProvider Parametr provider
poskytuje informace specifické pro jazykovou verzi, které se používají při analýze. Pokud provider
je null
nebo NumberFormatInfo objekt nelze získat, použijí se informace o formátu pro aktuální jazykovou verzi.
Převod selže, pokud parametr je null
nebo není číselnou hodnotou, provider
parametr nevydává NumberFormatInfo objekt nebo style
parametr není kombinací bitových příznaků z výčtuNumberStyles.s
Obvykle, pokud předáte Double.TryParse metodě řetězec, který je vytvořen voláním Double.ToString metody, je vrácena původní Double hodnota. Z důvodu ztráty přesnosti nemusí být hodnoty stejné. Kromě toho při pokusu o analýzu řetězcové reprezentace jedné Double.MinValue nebo Double.MaxValue se nepodaří provést odezvu. V rozhraní .NET Framework a .NET Core 2.2 a předchozích verzích vyvolá .OverflowException V .NET Core 3.0 a novějších verzích se vrátí Double.NegativeInfinity , pokud se pokusíte parsovat MinValue nebo Double.PositiveInfinity pokud se pokusíte parsovat MaxValue. V následujícím příkladu je uvedena ukázka.
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.
Pokud je v .NET Frameworku a .NET Core 2.2 a starších verzích s
mimo rozsah datového Double typu, Double.TryParse(String, NumberStyles, IFormatProvider, Double) metoda vyvolá .OverflowException
V .NET Core 3.0 a novějších verzích se nevyvolá žádná výjimka, pokud s
je mimo rozsah datového Double typu. Ve většině případů Double.TryParse(String, NumberStyles, IFormatProvider, Double) metoda vypočítá výsledek nebo Double.PositiveInfinityDouble.NegativeInfinity. Existuje však malá sada hodnot, které se považují za blíže k maximálním nebo minimálním hodnotám Double než k kladnému nebo zápornému nekonečnu. V těchto případech metoda vypočítá výsledek hodnoty Double.MaxValue nebo Double.MinValue.
Pokud je v parametru s
během operace analýzy nalezen oddělovač a příslušné oddělovače desetinných míst měny nebo čísla jsou stejné, operace parse předpokládá, že oddělovač je oddělovačem desetinných míst, nikoli oddělovačem skupin. Další informace o oddělovači najdete v tématech CurrencyDecimalSeparator, CurrencyGroupSeparatorNumberDecimalSeparator, a NumberGroupSeparator.
Viz také
Platí pro
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro