Compartir por


Double.TryParse Método

Definición

Convierte la representación de cadena de un número en su número de punto flotante de precisión doble equivalente. Un valor devuelto indica si la conversión se realizó correctamente o no.

Sobrecargas

Nombre Description
TryParse(String, IFormatProvider, Double)

Intenta analizar una cadena en un valor.

TryParse(ReadOnlySpan<Char>, Double)

Convierte la representación de intervalo de un número en un estilo especificado y un formato específico de la referencia cultural a su número de punto flotante de precisión doble equivalente. Un valor devuelto indica si la conversión se realizó correctamente o no.

TryParse(String, Double)

Convierte la representación de cadena de un número en su número de punto flotante de precisión doble equivalente. Un valor devuelto indica si la conversión se realizó correctamente o no.

TryParse(ReadOnlySpan<Byte>, IFormatProvider, Double)

Intenta analizar un intervalo de caracteres UTF-8 en un valor.

TryParse(ReadOnlySpan<Char>, IFormatProvider, Double)

Intenta analizar un intervalo de caracteres en un valor.

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

Intenta analizar un intervalo de caracteres UTF-8 en un valor.

TryParse(ReadOnlySpan<Byte>, Double)

Intenta convertir un intervalo de caracteres UTF-8 que contiene la representación de cadena de un número en su número de punto flotante de precisión doble equivalente.

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

Convierte un intervalo de caracteres que contiene la representación de cadena de un número en un estilo especificado y un formato específico de la referencia cultural a su número de punto flotante de precisión doble equivalente. Un valor devuelto indica si la conversión se realizó correctamente o no.

TryParse(String, NumberStyles, IFormatProvider, Double)

Convierte la representación de cadena de un número en un estilo y formato específico de la referencia cultural especificados en su número de punto flotante de precisión doble equivalente. Un valor devuelto indica si la conversión se realizó correctamente o no.

Comentarios

En .NET Core 3.0 y versiones posteriores, los valores que son demasiado grandes para representar se redondean a PositiveInfinity o NegativeInfinity según lo requiera la especificación IEEE 754. En versiones anteriores, incluido .NET Framework, el análisis de un valor demasiado grande para representar se produjo un error.

TryParse(String, IFormatProvider, Double)

Source:
Double.cs
Source:
Double.cs
Source:
Double.cs
Source:
Double.cs
Source:
Double.cs

Intenta analizar una cadena en un valor.

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

Parámetros

s
String

Cadena que se va a analizar.

provider
IFormatProvider

Objeto que proporciona información de formato específica de la referencia cultural sobre s.

result
Double

Cuando este método devuelve , contiene el resultado del análisis s correcto o de un valor indefinido en caso de error.

Devoluciones

true es si s se ha analizado correctamente; en caso contrario, falsees .

Se aplica a

TryParse(ReadOnlySpan<Char>, Double)

Source:
Double.cs
Source:
Double.cs
Source:
Double.cs
Source:
Double.cs
Source:
Double.cs

Convierte la representación de intervalo de un número en un estilo especificado y un formato específico de la referencia cultural a su número de punto flotante de precisión doble equivalente. Un valor devuelto indica si la conversión se realizó correctamente o no.

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

Parámetros

s
ReadOnlySpan<Char>

Intervalo de caracteres que contiene la representación de cadena del número que se va a convertir.

result
Double

Cuando este método devuelve, contiene el número de punto flotante de doble precisión equivalente al valor numérico o símbolo contenido en s el parámetro , si la conversión se realizó correctamente o cero si se produjo un error en la conversión. Se produce un error en la conversión si el s parámetro es o está null vacío. Si s es un número válido menor que Double.MinValue, result es NegativeInfinity. Si s es un número válido mayor que Double.MaxValue, result es PositiveInfinity. Este parámetro se pasa sin inicializar; Cualquier valor proporcionado originalmente en result se sobrescribirá.

Devoluciones

true es si s se ha convertido correctamente; de lo contrario, falsees .

Comentarios

En .NET Core 3.0 y versiones posteriores, los valores que son demasiado grandes para representar se redondean a PositiveInfinity o NegativeInfinity según lo requiera la especificación IEEE 754. En versiones anteriores, incluido .NET Framework, el análisis de un valor demasiado grande para representar se produjo un error.

Se aplica a

TryParse(String, Double)

Source:
Double.cs
Source:
Double.cs
Source:
Double.cs
Source:
Double.cs
Source:
Double.cs

Convierte la representación de cadena de un número en su número de punto flotante de precisión doble equivalente. Un valor devuelto indica si la conversión se realizó correctamente o no.

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

Parámetros

s
String

Cadena que contiene un número que se va a convertir.

result
Double

Cuando este método devuelve, contiene el número de punto flotante de precisión doble equivalente al s parámetro , si la conversión se realizó correctamente o cero si se produjo un error en la conversión. Se produce un error en la conversión si el s parámetro es null o Empty no es un número en un formato válido. También se produce un error en .NET Framework si s representa un número menor que Double.MinValue o mayor que Double.MaxValue. Este parámetro se pasa sin inicializar; Cualquier valor proporcionado originalmente en result se sobrescribirá.

Devoluciones

true es si s se ha convertido correctamente; de lo contrario, falsees .

Ejemplos

En el ejemplo siguiente se usa el TryParse(String, Double) método para convertir las representaciones de cadena de valores numéricos en Double valores. Se supone que en-US es la referencia cultural actual.

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

Comentarios

En .NET Core 3.0 y versiones posteriores, los valores que son demasiado grandes para representar se redondean a PositiveInfinity o NegativeInfinity según lo requiera la especificación IEEE 754. En versiones anteriores, incluido .NET Framework, el análisis de un valor demasiado grande para representar se produjo un error.

Esta sobrecarga difiere del Double.Parse(String) método devolviendo un valor booleano que indica si la operación de análisis se realizó correctamente en lugar de devolver el valor numérico analizado. Elimina la necesidad de usar el control de excepciones para probar un FormatException objeto en caso de que s no sea válido y no se pueda analizar correctamente.

El s parámetro puede contener el símbolo , NumberFormatInfo.PositiveInfinitySymbolo NumberFormatInfo.NegativeInfinitySymbol de la referencia NumberFormatInfo.NaNSymbolcultural actual. Esta comparación de cadenas no distingue mayúsculas de minúsculas en .NET Core 3.0 y versiones posteriores, pero distingue mayúsculas de minúsculas en versiones anteriores, incluido .NET Framework. El s parámetro también puede ser una cadena del formulario:

[ws] [sign] [entero-digits,]integral-digits[.[ fracciones-dígitos]][e[sign]exponencial-digits][ws]

Los elementos entre corchetes son opcionales. En la tabla siguiente se describe cada elemento.

Elemento Descripción
Ws Una serie de caracteres de espacio en blanco.
firma Un signo negativo o un símbolo de signo positivo.
dígitos enteros Serie de caracteres numéricos que van de 0 a 9 que especifican la parte integral del número. Los dígitos enteros pueden estar ausentes si hay fracciones de dígitos.
, Símbolo separador de grupo específico de la referencia cultural.
. Símbolo de separador decimal específico de la referencia cultural.
fracciones de dígitos Serie de caracteres numéricos que van de 0 a 9 que especifican la parte fraccionaria del número.
E Carácter en mayúsculas o minúsculas 'e', que indica la notación exponencial (científica).
dígitos exponenciales Serie de caracteres numéricos que van de 0 a 9 que especifican un exponente.

Para obtener más información sobre los formatos numéricos, vea Tipos de formato.

El s parámetro se interpreta mediante una combinación de las NumberStyles.Float marcas y NumberStyles.AllowThousands . Esto significa que se permiten espacios en blanco y separadores de miles, pero no se permiten símbolos de moneda. Para definir explícitamente los elementos (como símbolos de moneda, separadores de miles y espacios en blanco) que pueden estar presentes en s, use la sobrecarga del Double.TryParse(String, NumberStyles, IFormatProvider, Double) método .

El s parámetro se analiza mediante la información de formato de un NumberFormatInfo objeto que se inicializa para la referencia cultural del sistema actual. Para obtener más información, consulte NumberFormatInfo.CurrentInfo. Para analizar una cadena mediante la información de formato de alguna otra referencia cultural especificada, use la sobrecarga del Double.TryParse(String, NumberStyles, IFormatProvider, Double) método .

Normalmente, si pasa el Double.TryParse método una cadena que se crea llamando al Double.ToString método , se devuelve el valor original Double . Sin embargo, debido a una pérdida de precisión, es posible que los valores no sean iguales. Además, al intentar analizar la representación de cadena de o Double.MinValueDouble.MaxValue no se puede realizar un recorrido de ida y vuelta. En .NET Framework, produce una OverflowExceptionexcepción . En .NET Core 3.0 y versiones posteriores, devuelve Double.NegativeInfinity si intenta analizar MinValue o Double.PositiveInfinity si intenta analizar MaxValue. En el ejemplo siguiente se proporciona una ilustración.

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.

En .NET Framework, si s está fuera del intervalo del tipo de Double datos, el TryParse(String, Double) método produce una OverflowExceptionexcepción .

En .NET Core 3.0 y versiones posteriores, no se produce ninguna excepción cuando s está fuera del intervalo del Double tipo de datos. En la mayoría de los casos, el TryParse(String, Double) método calcula un resultado de Double.PositiveInfinity o Double.NegativeInfinity. Sin embargo, hay un pequeño conjunto de valores que se consideran más cercanos a los valores máximos o mínimos de Double que a infinito positivo o negativo. En esos casos, el método calcula un resultado de Double.MaxValue o Double.MinValue.

Si se encuentra un separador en el s parámetro durante una operación de análisis y los separadores decimales y de grupo son los mismos, la operación de análisis supone que el separador es un separador decimal en lugar de un separador de grupo. Para obtener más información sobre los separadores, vea CurrencyDecimalSeparator, NumberDecimalSeparator, CurrencyGroupSeparatory NumberGroupSeparator.

Consulte también

Se aplica a

TryParse(ReadOnlySpan<Byte>, IFormatProvider, Double)

Source:
Double.cs
Source:
Double.cs
Source:
Double.cs
Source:
Double.cs

Intenta analizar un intervalo de caracteres UTF-8 en un valor.

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

Parámetros

utf8Text
ReadOnlySpan<Byte>

Intervalo de caracteres UTF-8 que se van a analizar.

provider
IFormatProvider

Objeto que proporciona información de formato específica de la referencia cultural sobre utf8Text.

result
Double

Al devolver, contiene el resultado del análisis utf8Text correcto o un valor indefinido en caso de error.

Devoluciones

true es si utf8Text se ha analizado correctamente; en caso contrario, falsees .

Se aplica a

TryParse(ReadOnlySpan<Char>, IFormatProvider, Double)

Source:
Double.cs
Source:
Double.cs
Source:
Double.cs
Source:
Double.cs
Source:
Double.cs

Intenta analizar un intervalo de caracteres en un valor.

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

Parámetros

s
ReadOnlySpan<Char>

Intervalo de caracteres que se va a analizar.

provider
IFormatProvider

Objeto que proporciona información de formato específica de la referencia cultural sobre s.

result
Double

Cuando este método devuelve , contiene el resultado de analizar scorrectamente o un valor indefinido en caso de error.

Devoluciones

true es si s se ha analizado correctamente; en caso contrario, falsees .

Se aplica a

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

Source:
Double.cs
Source:
Double.cs
Source:
Double.cs
Source:
Double.cs

Intenta analizar un intervalo de caracteres UTF-8 en un valor.

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

Parámetros

utf8Text
ReadOnlySpan<Byte>

Intervalo de caracteres UTF-8 que se van a analizar.

style
NumberStyles

Combinación bit a bit de estilos de número que pueden estar presentes en utf8Text.

provider
IFormatProvider

Objeto que proporciona información de formato específica de la referencia cultural sobre utf8Text.

result
Double

Al devolver, contiene el resultado del análisis utf8Text correcto o un valor indefinido en caso de error.

Devoluciones

true es si utf8Text se ha analizado correctamente; en caso contrario, falsees .

Se aplica a

TryParse(ReadOnlySpan<Byte>, Double)

Source:
Double.cs
Source:
Double.cs
Source:
Double.cs
Source:
Double.cs

Intenta convertir un intervalo de caracteres UTF-8 que contiene la representación de cadena de un número en su número de punto flotante de precisión doble equivalente.

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

Parámetros

utf8Text
ReadOnlySpan<Byte>

Intervalo de caracteres UTF-8 de solo lectura que contiene el número que se va a convertir.

result
Double

Cuando este método devuelve, contiene un número de punto flotante de precisión doble equivalente al valor numérico o símbolo contenido en utf8Text si la conversión se realizó correctamente o cero si se produjo un error en la conversión. Se produce un error en la utf8Text conversión si es Empty o no está en un formato válido. Este parámetro se pasa sin inicializar; Cualquier valor proporcionado originalmente en el resultado se sobrescribirá.

Devoluciones

true es si utf8Text se ha convertido correctamente; de lo contrario, falsees .

Se aplica a

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

Source:
Double.cs
Source:
Double.cs
Source:
Double.cs
Source:
Double.cs
Source:
Double.cs

Convierte un intervalo de caracteres que contiene la representación de cadena de un número en un estilo especificado y un formato específico de la referencia cultural a su número de punto flotante de precisión doble equivalente. Un valor devuelto indica si la conversión se realizó correctamente o no.

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

Parámetros

s
ReadOnlySpan<Char>

Intervalo de caracteres de solo lectura que contiene el número que se va a convertir.

style
NumberStyles

Combinación bit a bit de NumberStyles valores que indica el formato permitido de s. Un valor típico que se debe especificar se Float combina con AllowThousands.

provider
IFormatProvider

Objeto que proporciona información de formato específica de la referencia cultural sobre s.

result
Double

Cuando este método devuelve y si la conversión se realizó correctamente, contiene un número de punto flotante de precisión doble equivalente al valor numérico o símbolo contenido en s. Contiene cero si se produjo un error en la conversión. Se produce un error en la conversión si el s parámetro es null, un intervalo de caracteres vacío o no un número en un formato compatible con style. Si s es un número válido menor que Double.MinValue, result es NegativeInfinity. Si s es un número válido mayor que Double.MaxValue, result es PositiveInfinity. Este parámetro se pasa sin inicializar; Cualquier valor proporcionado originalmente en result se sobrescribirá.

Devoluciones

true es si s se ha convertido correctamente; de lo contrario, falsees .

Comentarios

En .NET Core 3.0 y versiones posteriores, los valores que son demasiado grandes para representar se redondean a PositiveInfinity o NegativeInfinity según lo requiera la especificación IEEE 754. En versiones anteriores, incluido .NET Framework, el análisis de un valor demasiado grande para representar se produjo un error.

Se aplica a

TryParse(String, NumberStyles, IFormatProvider, Double)

Source:
Double.cs
Source:
Double.cs
Source:
Double.cs
Source:
Double.cs
Source:
Double.cs

Convierte la representación de cadena de un número en un estilo y formato específico de la referencia cultural especificados en su número de punto flotante de precisión doble equivalente. Un valor devuelto indica si la conversión se realizó correctamente o no.

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

Parámetros

s
String

Cadena que contiene un número que se va a convertir.

style
NumberStyles

Combinación bit a bit de NumberStyles valores que indica el formato permitido de s. Un valor típico que se debe especificar se Float combina con AllowThousands.

provider
IFormatProvider

que IFormatProvider proporciona información de formato específica de la referencia cultural sobre s.

result
Double

Cuando este método devuelve, contiene un número de punto flotante de precisión doble equivalente al valor numérico o símbolo contenido en s, si la conversión se realizó correctamente o cero si se produjo un error en la conversión. Se produce un error en la conversión si el s parámetro es null o Empty no está en un formato compatible con style, o si style no es una combinación válida de constantes de NumberStyles enumeración. También se produce un error en .NET Framework si s representa un número menor que SByte.MinValue o mayor que SByte.MaxValue. Este parámetro se pasa sin inicializar; Cualquier valor proporcionado originalmente en result se sobrescribirá.

Devoluciones

true es si s se ha convertido correctamente; de lo contrario, falsees .

Excepciones

style no es un NumberStyles valor.

-o-

style incluye el AllowHexSpecifier valor .

Ejemplos

En el ejemplo siguiente se muestra el uso del Double.TryParse(String, NumberStyles, IFormatProvider, Double) método para analizar la representación de cadena de números que tienen un estilo determinado y se da formato a las convenciones de una referencia cultural determinada.

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

Comentarios

En .NET Core 3.0 y versiones posteriores, los valores que son demasiado grandes para representar se redondean a PositiveInfinity o NegativeInfinity según lo requiera la especificación IEEE 754. En versiones anteriores, incluido .NET Framework, el análisis de un valor demasiado grande para representar se produjo un error.

El TryParse método es similar al Parse(String, NumberStyles, IFormatProvider) método , excepto que este método no produce una excepción si se produce un error en la conversión. Si la conversión se realiza correctamente, el valor devuelto es true y el result parámetro se establece en el resultado de la conversión. Si se produce un error en la conversión, el valor devuelto es false y el result parámetro se establece en cero. Esto elimina la necesidad de usar el control de excepciones para probar un FormatException objeto en caso de que s no sea válido y no se pueda analizar correctamente.

El style parámetro define el formato permitido del s parámetro para que la operación de análisis se realice correctamente. Debe ser una combinación de marcas de bits de la NumberStyles enumeración. No se admiten los siguientes NumberStyles miembros:

El s parámetro puede contener NumberFormatInfo.PositiveInfinitySymbol, NumberFormatInfo.NegativeInfinitySymbolo NumberFormatInfo.NaNSymbol símbolo para la referencia cultural indicada por provider. Esta comparación de cadenas no distingue mayúsculas de minúsculas en .NET Core 3.0 y versiones posteriores, pero distingue mayúsculas de minúsculas en versiones anteriores, incluido .NET Framework. Además, dependiendo del valor de style, el s parámetro puede incluir los siguientes elementos:

[ws] [$] [sign] [integral-digits,]integral-digits[.fractional-digits][e[sign]exponential-digits][ws]

Los elementos entre corchetes ([ y ]) son opcionales. En la tabla siguiente se describe cada elemento.

Elemento Descripción
Ws Espacio en blanco opcional. El espacio en blanco puede aparecer al principio de s si style incluye la NumberStyles.AllowLeadingWhite marca . Puede aparecer al final de s si style incluye la NumberStyles.AllowTrailingWhite marca .
$ Símbolo de moneda específico de la referencia cultural. Su posición en la cadena se define mediante las NumberFormatInfo.CurrencyNegativePattern propiedades o NumberFormatInfo.CurrencyPositivePattern del NumberFormatInfo objeto devuelto por el IFormatProvider.GetFormat método del provider parámetro . El símbolo de moneda puede aparecer en s si style incluye la NumberStyles.AllowCurrencySymbol marca .
firma Un signo opcional. El signo puede aparecer al principio de s si incluye la style marca y puede aparecer al final de NumberStyles.AllowLeadingSign si s incluye la styleNumberStyles.AllowTrailingSign marca. Los paréntesis se pueden usar en s para indicar un valor negativo si style incluye la NumberStyles.AllowParentheses marca .
dígitos enteros Serie de dígitos que van de 0 a 9 que especifican la parte integral del número. Los dígitos enteros pueden estar ausentes si hay fracciones de dígitos.
, Símbolo separador de miles específico de la referencia cultural. El símbolo separador de miles de referencias culturales actual puede aparecer en s si style incluye la NumberStyles.AllowThousands marca .
. Símbolo de separador decimal específico de la referencia cultural. El símbolo de separador decimal de la referencia cultural actual puede aparecer en s si style incluye la NumberStyles.AllowDecimalPoint marca .
fracciones de dígitos Serie de dígitos que van de 0 a 9 que especifican la parte fraccionaria del número. Los dígitos fraccionarios pueden aparecer en s si style incluye la NumberStyles.AllowDecimalPoint marca .
e Carácter e o E, que indica que s puede representar un número mediante notación exponencial. El s parámetro puede representar un número en notación exponencial si el estilo incluye la NumberStyles.AllowExponent marca .
dígitos exponenciales Serie de dígitos que van de 0 a 9 que especifican un exponente.

Nota

La operación de análisis omite los caracteres NUL (U+0000) terminados, s independientemente del valor del style argumento.

Una cadena solo con dígitos (que corresponde al NumberStyles.None estilo) siempre analiza correctamente si está en el intervalo del Double tipo. Los miembros restantes System.Globalization.NumberStyles controlan los elementos que pueden ser, pero no deben estar presentes en la cadena de entrada. En la tabla siguiente se indica cómo afectan las marcas individuales NumberStyles a los elementos que pueden estar presentes en s.

Valor numberStyles Elementos permitidos en s además de dígitos
None Solo el elemento integral-digits .
AllowDecimalPoint Elementos . y fracciones de dígitos .
AllowExponent El s parámetro también puede usar la notación exponencial. Esta marca por sí misma admite valores en el formato enteros dígitosEexponenciales; Se necesitan marcas adicionales para analizar correctamente las cadenas en notación exponencial con elementos como signos positivos o negativos y símbolos decimales.
AllowLeadingWhite Elemento ws al principio de s.
AllowTrailingWhite Elemento ws al final de s.
AllowLeadingSign Elemento de signo al principio de s.
AllowTrailingSign Elemento de signo al final de s.
AllowParentheses Elemento de signo en forma de paréntesis que incluye el valor numérico.
AllowThousands Elemento , .
AllowCurrencySymbol Elemento $ .
Currency Todo. El s parámetro no puede representar un número hexadecimal ni un número en notación exponencial.
Float El elemento ws al principio o al final de s, firma al principio de sy el símbolo . El s parámetro también puede usar la notación exponencial.
Number Los wselementos separadores , sign, miles (,) y decimal point (.).
Any Todos los estilos, excepto s no pueden representar un número hexadecimal.

El provider parámetro es una IFormatProvider implementación, como un NumberFormatInfo objeto o CultureInfo . El provider parámetro proporciona información específica de la referencia cultural que se usa en el análisis. Si provider es o no null se puede obtener un NumberFormatInfo objeto, se usa la información de formato de la referencia cultural actual.

Se produce un error en la conversión si el s parámetro es null o no un valor numérico, el provider parámetro no produce un NumberFormatInfo objeto o el style parámetro no es una combinación de marcas de bits de la NumberStyles enumeración.

Normalmente, si pasa el Double.TryParse método una cadena que se crea llamando al Double.ToString método , se devuelve el valor original Double . Sin embargo, debido a una pérdida de precisión, es posible que los valores no sean iguales. Además, al intentar analizar la representación de cadena de o Double.MinValueDouble.MaxValue no se puede realizar un recorrido de ida y vuelta. En .NET Framework, produce una OverflowExceptionexcepción . En .NET Core 3.0 y versiones posteriores, devuelve Double.NegativeInfinity si intenta analizar MinValue o Double.PositiveInfinity si intenta analizar MaxValue. En el ejemplo siguiente se proporciona una ilustración.

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.

En .NET Framework, si s está fuera del intervalo del tipo de Double datos, el Double.TryParse(String, NumberStyles, IFormatProvider, Double) método produce una OverflowExceptionexcepción .

En .NET Core 3.0 y versiones posteriores, no se produce ninguna excepción cuando s está fuera del intervalo del Double tipo de datos. En la mayoría de los casos, el Double.TryParse(String, NumberStyles, IFormatProvider, Double) método calcula un resultado de Double.PositiveInfinity o Double.NegativeInfinity. Sin embargo, hay un pequeño conjunto de valores que se consideran más cercanos a los valores máximos o mínimos de Double que a infinito positivo o negativo. En esos casos, el método calcula un resultado de Double.MaxValue o Double.MinValue.

Si se encuentra un separador en el s parámetro durante una operación de análisis, y los separadores decimales o numéricos y de número aplicables son los mismos, la operación de análisis supone que el separador es un separador decimal en lugar de un separador de grupo. Para obtener más información sobre los separadores, vea CurrencyDecimalSeparator, NumberDecimalSeparator, CurrencyGroupSeparatory NumberGroupSeparator.

Consulte también

Se aplica a