atof, _atof_l, _wtof, _wtof_l

Convertir una cadena a un valor double.

Sintaxis

double atof(
   const char *str
);
double _atof_l(
   const char *str,
   _locale_t locale
);
double _wtof(
   const wchar_t *str
);
double _wtof_l(
   const wchar_t *str,
   _locale_t locale
);

Parámetros

str
Cadena que se va a convertir.

locale
Configuración regional que se va a usar.

Valor devuelto

Cada función devuelve el valor double que se genera al interpretar los caracteres de entrada como un número. El valor devuelto es 0,0 si la entrada no se puede convertir en un valor de ese tipo.

En todos los casos de valores fuera del intervalo, errno se establece en ERANGE. Si el parámetro pasado en es NULL, se invoca el controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, estas funciones establecen errno en EINVAL y devuelven 0.

Comentarios

Estas funciones convierten una cadena de caracteres en un valor de punto flotante de doble precisión.

La cadena de entrada es una secuencia de caracteres que se puede interpretar como un valor numérico del tipo especificado. La función deja de leer la cadena de entrada en el primer carácter que no puede reconocer como parte de un número. Es posible que este carácter sea el carácter nulo ("\0" o L"\0") que termina la cadena.

El argumento str para atof y _wtof tiene el formato siguiente:

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

whitespace consta de caracteres de espacio o tabulación, que se omiten; sign es más (+) o menos (-); y digits es uno o más dígitos decimales. Si no aparece ningún dígito antes del separador decimal, debe aparecer al menos uno después. Puede que los dígitos decimales vayan seguidos de un exponente, que consta de una letra introductoria (e o E) y un entero decimal con signo opcional.

Las versiones UCRT de estas funciones no admiten la conversión de letras como exponente de estilo Fortran (d o D). Esta extensión no estándar era compatible con versiones anteriores de CRT y puede que sea un cambio decisivo para el código.

Las versiones de estas funciones con el sufijo _l son idénticas, salvo que usan el parámetro locale pasado en lugar de la configuración regional actual.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Asignaciones de rutinas de texto genérico

Rutina TCHAR.H _UNICODE y _MBCS no definidos _MBCS definido _UNICODE definido
_tstof atof atof _wtof
_ttof atof atof _wtof

Requisitos

Rutinas Encabezado necesario
atof, _atof_l C: <math.h> o <stdlib.h> C++: <cstdlib>, <stdlib.h>, <cmath> o <math.h>
_wtof, _wtof_l C: <stdlib.h> o <wchar.h> C++: <cstdlib>, <stdlib.h> o <wchar.h>

Ejemplo

Este programa muestra cómo se pueden convertir números almacenados como cadenas en valores numéricos con las funciones atof y _atof_l.

// crt_atof.c
//
// This program shows how numbers stored as
// strings can be converted to numeric
// values using the atof and _atof_l functions.

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

int main(void)
{
    char    *str = NULL;
    double value = 0;
    _locale_t fr = _create_locale(LC_NUMERIC, "fr-FR");

    // An example of the atof function
    // using leading and training spaces.
    str = "  3336402735171707160320 ";
    value = atof(str);
    printf("Function: atof(\"%s\") = %e\n", str, value);

    // Another example of the atof function
    // using the 'E' exponential formatting keyword.
    str = "3.1412764583E210";
    value = atof(str);
    printf("Function: atof(\"%s\") = %e\n", str, value);

    // An example of the atof and _atof_l functions
    // using the 'e' exponential formatting keyword
    // and showing different decimal point interpretations.
    str = "  -2,309e-25";
    value = atof(str);
    printf("Function: atof(\"%s\") = %e\n", str, value);
    value = _atof_l(str, fr);
    printf("Function: _atof_l(\"%s\", fr)) = %e\n", str, value);
}
Function: atof("  3336402735171707160320 ") = 3.336403e+21
Function: atof("3.1412764583E210") = 3.141276e+210
Function: atof("  -2,309e-25") = -2.000000e+00
Function: _atof_l("  -2,309e-25", fr)) = -2.309000e-25

Consulte también

Conversión de datos
Compatibilidad con matemáticas y punto flotante
Configuración regional
_ecvt
_fcvt
_gcvt
setlocale, _wsetlocale
_atodbl, _atodbl_l, _atoldbl, _atoldbl_l, _atoflt, _atoflt_l