Namespaces
Variants

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

From 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 (de 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 determinado por std::isspace ) hasta que se encuentra el primer carácter que no es un espacio en blanco. Luego toma tantos caracteres como sea posible para formar una representación válida de punto flotante y los convierte en un valor de punto flotante. El valor válido de punto flotante puede ser uno de los siguientes:

  • expresión decimal de punto flotante. Consta de las siguientes partes:
  • (opcional) signo más o menos
  • secuencia no vacía de dígitos decimales que opcionalmente contiene el carácter de punto decimal (según lo determinado por la configuración regional actual de C) (define el significando)
  • (opcional) e o E seguido de signo menos o más opcional y 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 opcionalmente contiene un carácter de punto decimal (según lo determinado por la configuración regional actual de C) (define el significando)
  • (opcional) p o P seguido de un signo más o menos 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 ignorando mayúsculas/minúsculas
  • expresión no es un número. Consta de las siguientes partes:
  • (opcional) signo más o menos
  • NAN o NAN( char_sequence  ) ignorando mayúsculas/minúsculas en 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 configuración regional de C actualmente instalada locale .

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 será calculado y almacenado en * pos , indicando el número de caracteres que fueron procesados por la conversión.

Contenidos

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)