Namespaces
Variants

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

Depuis fr.cppreference.net
 
 
 
std::basic_string
 
Défini dans l'en-tête <string>
float       stof ( const std::string& str, std::size_t* pos = nullptr );
(1) (depuis C++11)
float       stof ( const std::wstring& str, std::size_t* pos = nullptr );
(2) (depuis C++11)
double      stod ( const std::string& str, std::size_t* pos = nullptr );
(3) (depuis C++11)
double      stod ( const std::wstring& str, std::size_t* pos = nullptr );
(4) (depuis C++11)
long double stold( const std::string& str, std::size_t* pos = nullptr );
(5) (depuis C++11)
long double stold( const std::wstring& str, std::size_t* pos = nullptr );
(6) (depuis C++11)

Interprète une valeur à virgule flottante dans une chaîne str.

Soit ptr un pointeur interne (aux fonctions de conversion) de type char* (1,3,5) ou wchar_t* (2,4,6), en conséquence.

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

La fonction ignore tous les caractères blancs (déterminés par std::isspace) jusqu'à ce qu'un premier caractère non blanc soit trouvé. Ensuite, elle prend autant de caractères que possible pour former une représentation valide d'un nombre à virgule flottante et les convertit en une valeur à virgule flottante. La valeur à virgule flottante valide peut être l'une des suivantes :

  • une expression décimale à virgule flottante. Elle est composée des parties suivantes :
  • (optionnel) signe plus ou moins
  • séquence non vide de chiffres décimaux contenant éventuellement un caractère de point décimal (déterminé par la locale C courante) (définit la mantisse)
  • (optionnel) e ou E suivi d'un signe moins ou plus optionnel et d'une séquence non vide de chiffres décimaux (définit l'exposant en base 10)
  • une expression hexadécimale à virgule flottante. Elle est composée des parties suivantes :
  • (optionnel) signe plus ou moins
  • 0x or 0X
  • séquence non vide de chiffres hexadécimaux contenant éventuellement un caractère de point décimal (déterminé par la locale C courante) (définit la mantisse)
  • (optionnel) p ou P suivi d'un signe moins ou plus optionnel et d'une séquence non vide de chiffres décimaux (définit l'exposant en base 2)
  • une expression d'infini. Elle est composée des parties suivantes :
  • (optionnel) signe plus ou moins
  • INF ou INFINITY sans tenir compte de la casse
  • une expression de nombre non numérique (NaN). Elle est composée des parties suivantes :
  • (optionnel) signe plus ou moins
  • NAN ou NAN(char_sequence ) sans tenir compte de la casse de la partie NAN. char_sequence ne peut contenir que des chiffres, des lettres latines et des tirets bas. Le résultat est une valeur à virgule flottante NaN silencieuse.
  • toute autre expression qui peut être acceptée par la locale C actuellement installée.

Si pos n'est pas un pointeur nul, alors ptr recevra l'adresse du premier caractère non converti dans str.c_str(), et l'index de ce caractère sera calculé et stocké dans *pos, donnant le nombre de caractères qui ont été traités par la conversion.

Paramètres

str - la chaîne à convertir
pos - adresse d'un entier pour stocker le nombre de caractères traités

Valeur de retour

La chaîne convertie en type à virgule flottante spécifié.

Exceptions

std::invalid_argument si aucune conversion n'a pu être effectuée.

std::out_of_range si la valeur convertie sortirait de la plage du type de résultat ou si la fonction sous-jacente ( std::strtof , std::strtod ou std::strtold ) définit errno à ERANGE .

Exemple

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 2009 C++11 std::out_of_range ne serait pas levée si la valeur convertie
sortirait de la plage du type de résultat
lèvera
LWG 2403 C++11 stof appelait std::strtod ou std::wcstod stof appelle std::strtof ou std::wcstof

Voir aussi

(C++11) (C++11) (C++11)
convertit une chaîne en entier signé
(fonction)
(C++11) (C++11)
convertit une chaîne en entier non signé
(fonction)
(C++17)
convertit une séquence de caractères en valeur entière ou à virgule flottante
(fonction)