Double.TryParse Método

Definición

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

Sobrecargas

TryParse(String, IFormatProvider, Double)

Intenta analizar una cadena en un valor.

TryParse(String, Double)

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

TryParse(ReadOnlySpan<Char>, IFormatProvider, Double)

Intenta analizar un intervalo de caracteres en un valor.

TryParse(ReadOnlySpan<Char>, Double)

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

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

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

TryParse(String, NumberStyles, IFormatProvider, Double)

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

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, analizar un valor demasiado grande para representar se produjo un error.

TryParse(String, IFormatProvider, Double)

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

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

result
Double

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

Devoluciones

Boolean

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

Se aplica a

TryParse(String, Double)

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

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 el resultado que devuelve este método contiene el número de punto flotante de precisión doble equivalente al parámetro s, si la conversión tuvo éxito o cero si falló. Se produce un error en la conversión si el parámetro s es null o Empty, o bien no es un número en un formato correcto. También se produce un error en .NET Framework y .NET Core 2.2 y versiones anteriores 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

Boolean

true si s se convirtió correctamente; en caso contrario, false.

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, analizar 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 en caso FormatException de que s no sea válido y no se pueda analizar correctamente.

El s parámetro puede contener la referencia NumberFormatInfo.PositiveInfinitySymbolcultural actual , NumberFormatInfo.NegativeInfinitySymbol, NumberFormatInfo.NaNSymbol (la comparación de cadenas distingue mayúsculas de minúsculas) o una cadena del formulario:

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

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

Elemento Descripción
ws Una serie de caracteres de espacio en blanco.
sign Un signo negativo o un símbolo de signo positivo.
dígitos enteros Serie de caracteres numéricos comprendidos entre 0 y 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 comprendidos entre 0 y 9 que especifican la parte fraccionarcional 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 comprendidos entre 0 y 9 que especifican un exponente.

Para obtener más información sobre los formatos numéricos, vea Aplicar formato a tipos.

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, vea 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 mediante una llamada al Double.ToString método , se devuelve el valor original Double . Sin embargo, debido a una pérdida de precisión, los valores pueden no ser iguales. Además, al intentar analizar la representación de cadena de o Double.MinValue no se puede realizar un recorrido de ida y Double.MaxValue vuelta. En .NET Framework y .NET Core 2.2 y versiones anteriores, 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. Esto se muestra en el ejemplo siguiente.

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 y .NET Core 2.2 y versiones anteriores, si s está fuera del intervalo del tipo de Double datos, el TryParse(String, Double) método produce .OverflowException

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 son infinitos positivos o negativos. 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<Char>, IFormatProvider, Double)

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 van a analizar.

provider
IFormatProvider

Un 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

Boolean

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

Se aplica a

TryParse(ReadOnlySpan<Char>, Double)

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

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>

Un 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 un resultado, contiene el número de punto flotante de precisión doble equivalente al valor numérico o al símbolo contenido en el parámetro s si la conversión se ha producido correctamente o cero en caso de error. Se produce un error en la conversión si el parámetro s es null o está vacío, o no tiene un formato compatible con style. También se produce un error en la conversión si style no es una combinación válida de constantes enumeradas de NumberStyles. 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

Boolean

true si s se convirtió correctamente; en caso contrario, false.

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(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Double)

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

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

Parámetros

s
ReadOnlySpan<Char>

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

style
NumberStyles

Combinación bit a bit de valores NumberStyles que indica el formato permitido de s. Un valor que se especifica de forma habitual es Float combinado con AllowThousands.

provider
IFormatProvider

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

result
Double

Cuando este método devuelve un valor, y si la conversión se ha realizado correctamente, contiene el número de punto flotante de precisión doble equivalente al valor numérico o al símbolo contenido en s. Contiene cero si se ha producido un error en la conversión. Se produce un error de conversión si el parámetro s es null, es un intervalo de caracteres vacío o no tiene 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

Boolean

true si s se convirtió correctamente; en caso contrario, false.

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)

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

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 valores NumberStyles que indica el formato permitido de s. Un valor que se especifica de forma habitual es Float combinado con AllowThousands.

provider
IFormatProvider

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

result
Double

Cuando el resultado que devuelve este método contiene el número de punto flotante de precisión doble equivalente al valor numérico o al símbolo contenido en s, si la conversión tuvo éxito o cero si falló. Se produce un error en la conversión si el parámetro s es null o Empty, no está en un formato compatible con style, o bien si style no es una combinación válida de constantes de enumeración NumberStyles. También se produce un error en .NET Framework o .NET Core 2.2 y versiones anteriores 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

Boolean

true si s se convirtió correctamente; en caso contrario, false.

Excepciones

style no es un valor NumberStyles.

o bien

style incluye el valor AllowHexSpecifier

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 les da formato mediante 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 en caso FormatException 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 para la referencia cultural indicada por provider. 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 de los corchetes ([ y ]) son opcionales. En esta tabla 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 .
sign Un signo opcional. El signo puede aparecer al principio de s si incluye la NumberStyles.AllowLeadingSign marca y puede aparecer al final de s si style incluye la NumberStyles.AllowTrailingSignstyle 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 comprendidos entre 0 y 9 que especifican la parte integral del número. Los dígitos enteros pueden estar ausentes si hay dígitos fraccionarios.
, Símbolo separador de miles específico de la referencia cultural. El símbolo separador de miles de la referencia cultural 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 comprendidos entre 0 y 9 que especifican la parte fraccionarcional del número. Los dígitos fraccionarios pueden aparecer en s si style incluye la NumberStyles.AllowDecimalPoint marca .
e El 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 comprendidos entre 0 y 9 que especifican un exponente.

Nota

La operación de análisis omite todos los caracteres NUL (U+0000) de 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. System.Globalization.NumberStyles Los demás miembros controlan los elementos que pueden ser, pero que no son necesarios para 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 la forma de dígitos enterosEexponenciales; 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 sign al principio de s.
AllowTrailingSign Elemento sign al final de s.
AllowParentheses Elemento de signo en forma de paréntesis que incluye el valor numérico.
AllowThousands Elemento , .
AllowCurrencySymbol Elemento $.
Currency Todos. El s parámetro no puede representar un número hexadecimal o 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 que 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 utilizada en el análisis. Si provider es null o no 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 mediante una llamada al Double.ToString método , se devuelve el valor original Double . Sin embargo, debido a una pérdida de precisión, los valores pueden no ser iguales. Además, al intentar analizar la representación de cadena de o Double.MinValue no se puede realizar un recorrido de ida y Double.MaxValue vuelta. En .NET Framework y .NET Core 2.2 y versiones anteriores, 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. Esto se muestra en el ejemplo siguiente.

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 y .NET Core 2.2 y versiones anteriores, si s está fuera del intervalo del tipo de Double datos, el Double.TryParse(String, NumberStyles, IFormatProvider, Double) método produce .OverflowException

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 son infinitos positivos o negativos. 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 aplicables son iguales, 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