Namespaces
Variants

std::stof, std::stod, std::stold

De es.cppreference.net
 
 
 
std::basic_string
 
Definido en el encabezado <string>
float       stof ( const std::string& str, std::size_t* pos = nullptr );
(1) (desde C++11)
float       stof ( const std::wstring& str, std::size_t* pos = nullptr );
(2) (desde C++11)
double      stod ( const std::string& str, std::size_t* pos = nullptr );
(3) (desde C++11)
double      stod ( const std::wstring& str, std::size_t* pos = nullptr );
(4) (desde C++11)
long double stold( const std::string& str, std::size_t* pos = nullptr );
(5) (desde C++11)
long double stold( const std::wstring& str, std::size_t* pos = nullptr );
(6) (desde C++11)

Interpreta un valor de punto flotante en una cadena str.

Sea ptr un puntero interno (a las funciones de conversión) de tipo char* (1,3,5) o wchar_t* (2,4,6), según corresponda.

1) Llama a std::strtof(str.c_str(), &ptr).
2) Llama a std::wcstof(str.c_str(), &ptr).
3) Llama a std::strtod(str.c_str(), &ptr).
4) Llama a std::wcstod(str.c_str(), &ptr).
5) Llama a std::strtold(str.c_str(), &ptr).
6) Llama a std::wcstold(str.c_str(), &ptr).

La función descarta cualquier carácter de espacio en blanco (según lo determina std::isspace) hasta que se encuentra el primer carácter que no sea un espacio en blanco. Luego toma tantos caracteres como sea posible para formar una representación de punto flotante válida y los convierte a un valor de punto flotante. El valor de punto flotante válido puede ser uno de los siguientes:

  • expresión de punto flotante decimal. Consta de las siguientes partes:
  • (opcional) signo más o menos
  • secuencia no vacía de dígitos decimales que puede contener opcionalmente un carácter de punto decimal (según lo determina la locale actual de C) (define la mantisa)
  • (opcional) e o E seguido de un signo menos o más opcional y una secuencia no vacía de dígitos decimales (define el exponente en base 10)
  • expresión de punto flotante hexadecimal. Consta de las siguientes partes:
  • (opcional) signo más o menos
  • 0x o 0X
  • secuencia no vacía de dígitos hexadecimales que puede contener opcionalmente un carácter de punto decimal (según lo determina la locale actual de C) (define la mantisa)
  • (opcional) p o P seguido de un signo menos o más opcional y una secuencia no vacía de dígitos decimales (define el exponente en base 2)
  • expresión de infinito. Consta de las siguientes partes:
  • (opcional) signo más o menos
  • INF o INFINITY sin distinción de mayúsculas y minúsculas
  • expresión de no es un número. Consta de las siguientes partes:
  • (opcional) signo más o menos
  • NAN o NAN(char_sequence ) sin distinción de mayúsculas y minúsculas de la parte NAN. char_sequence solo puede contener dígitos, letras latinas y guiones bajos. El resultado es un valor de punto flotante NaN silencioso.
  • cualquier otra expresión que pueda ser aceptada por la locale de C actualmente instalada.

Si pos no es un puntero nulo, entonces ptr recibirá la dirección del primer carácter no convertido en str.c_str(), y el índice de ese carácter se calculará y almacenará en *pos, dando el número de caracteres que fueron procesados por la conversión.

Parámetros

str - la cadena a convertir
pos - dirección de un entero para almacenar el número de caracteres procesados

Valor de retorno

La cadena convertida al tipo de punto flotante especificado.

Excepciones

std::invalid_argument si no se pudo realizar ninguna conversión.

std::out_of_range si el valor convertido caería fuera del rango del tipo de resultado o si la función subyacente ( std::strtof , std::strtod o std::strtold ) establece errno a ERANGE .

Ejemplo

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2009 C++11 std::out_of_range no sería lanzado si el valor convertido
cayera fuera del rango del tipo de resultado
lanzará
LWG 2403 C++11 stof llamaba a std::strtod o std::wcstod stof llama a std::strtof o std::wcstof

Véase también

(C++11) (C++11) (C++11)
convierte una cadena a un entero con signo
(función)
(C++11) (C++11)
convierte una cadena a un entero sin signo
(función)
(C++17)
convierte una secuencia de caracteres a un valor entero o de punto flotante
(función)