Compartir a través de


strtod, _strtod_l, wcstod, _wcstod_l

Convertir las cadenas a un valor de precisión doble.

double strtod(
   const char *nptr,
   char **endptr 
);
double _strtod_l(
   const char *nptr,
   char **endptr,
   _locale_t locale
);
double wcstod(
   const wchar_t *nptr,
   wchar_t **endptr 
);
double wcstod_l(
   const wchar_t *nptr,
   wchar_t **endptr,
   _locale_t locale
);

Parámetros

  • nptr
    Cadena terminada en NULL que se va a convertir.

  • endptr
    Puntero al carácter que detiene el examen.

  • locale
    Configuración regional que se va a usar.

Valor devuelto

strtod devuelve el valor del número de punto flotante, excepto cuando la representación provocaría un desbordamiento, en cuyo caso la función devuelve +/-HUGE_VAL. El signo de HUGE_VAL coincide con el signo del valor que no se puede representar. strtod devuelve 0 si no se puede realizar ninguna conversión o si se produce un subdesbordamiento.

wcstod devuelve valores de manera parecida a strtod. Para ambas funciones, errno se establece en ERANGE si el desbordamiento o subdesbordamiento aparece y se invoca el controlador de parámetro no válido, tal como se describe en Validación de parámetros.

Vea _doserrno, errno, _sys_errlist, y _sys_nerr para obtener más información sobre estos y otros códigos de retorno.

Comentarios

Cada función convierte la cadena de entrada nptr en double. La función de strtod convierte nptr a un valor de precisión doble. strtod deja de leer la cadena nptr en el primer carácter que no reconoce como parte de un número. Este puede ser el carácter null final. wcstod es una versión con caracteres anchos de strtod; su argumento nptr es una cadena de caracteres anchos. Por lo demás, estas funciones se comportan exactamente igual.

Asignaciones de rutina de texto genérico

Rutina TCHAR.H

_UNICODE y _MBCS no definidos

_MBCS definido

_UNICODE definido

_tcstod

strtod

strtod

wcstod

_tcstod_l

_strtod_l

_strtod_l

_wcstod_l

El valor de categoría de LC_NUMERIC de la configuración regional actual determina el reconocimiento de carácter de la base de nptr; para obtener más información, vea setlocale. Las funciones sin el sufijo de _l utilizan la configuración regional actual; _strtod_l es idéntico a _strtod_l salvo que utilizan la configuración regional pasado en su lugar. Para obtener más información, vea Configuración regional.

Si endptr no es NULL, se almacena un puntero al carácter que detuvo el análisis en la ubicación a la que señala endptr. Si no se puede realizar ninguna conversión (no se encontraron dígitos válidos o se especificó una base no válida), el valor de nptr se almacena en la ubicación a la que señala endptr.

strtod espera que nptr señale a una cadena con el formato siguiente:

[whitespace] [sign] [digits] [.digits] [ {d | D | e | E}[sign]digits]

whitespace puede constar de espacio y caracteres de tabulación, que se omiten, sign puede ser más (+) o menos (–) y digits son uno o varios dígitos decimales. Si no aparece ningún dígito antes del carácter de base, debe aparecer al menos uno después del carácter de base. Los dígitos decimales pueden ir seguidos por un exponente, que consta de una letra preliminar (d, D, e o E) y, opcionalmente, un entero con signo. Si no aparece una parte del exponente ni un carácter de base, se supondrá que el carácter de base sigue el último dígito de la cadena. El primer carácter que no se ajusta a este formato detiene el análisis.

Requisitos

Rutina

Encabezado necesario

strtod, _strtod_l

<stdlib.h>

wcstod, _wcstod_l

<stdlib.h> o <wchar.h>

Para obtener información adicional de compatibilidad, vea Compatibilidad en la Introducción.

Ejemplo

// crt_strtod.c
// This program uses strtod to convert a
// string to a double-precision value; strtol to
// convert a string to long integer values; and strtoul
// to convert a string to unsigned long-integer values.
//

#include <stdlib.h>
#include <stdio.h>

int main( void )
{
   char   *string, *stopstring;
   double x;
   long   l;
   int    base;
   unsigned long ul;

   string = "3.1415926This stopped it";
   x = strtod( string, &stopstring );
   printf( "string = %s\n", string );
   printf("   strtod = %f\n", x );
   printf("   Stopped scan at: %s\n\n", stopstring );

   string = "-10110134932This stopped it";
   l = strtol( string, &stopstring, 10 );
   printf( "string = %s\n", string );
   printf("   strtol = %ld\n", l );
   printf("   Stopped scan at: %s\n\n", stopstring );

   string = "10110134932";
   printf( "string = %s\n", string );
 
   // Convert string using base 2, 4, and 8:
   for( base = 2; base <= 8; base *= 2 )
   {
      // Convert the string:
      ul = strtoul( string, &stopstring, base );
      printf( "   strtol = %ld (base %d)\n", ul, base );
      printf( "   Stopped scan at: %s\n", stopstring );
   }
}
  

Equivalente en .NET Framework

System::Convert::ToDouble

Vea también

Referencia

Conversión de datos

Compatibilidad con el punto flotante

Interpretación de secuencias de caracteres de varios bytes

Configuración regional

Funciones de conversión de valores de cadena en valores numéricos

strtol, wcstol, _strtol_l, _wcstol_l

strtoul, _strtoul_l, wcstoul, _wcstoul_l

atof, _atof_l, _wtof, _wtof_l

localeconv

_create_locale, _wcreate_locale

_free_locale