STRTOD |
Chaîne à double |
---|---|
Langage C++ | cstdlib (stdlib.h) |
Syntaxe
double strtod(const char *str1,char **endptr) |
Paramètres
Nom | Description |
---|---|
str1 | Ce paramètre permet d'indiquer la chaîne de caractères ASCIZ contenant le nombre. |
endptr | Ce paramètre retourne un pointeur à la fin du nombre dans la chaîne de caractères ASCIZ. |
Description
Cette fonction permet de convertir la chaîne de caractères en nombre de type «double».
Remarques
- La fonction strtod() convertit la représentation sous le format de chaîne d'un nombre entreposé dans la chaîne de caractères pointée par str1 en un type de données double et renvoie le résultat.
- La fonction strtod() fonctionne comme suit. Tout d'abord, tout espace blanc dans la chaîne de caractères pointée par str1 est supprimé. Ensuite, chaque caractère comprenant le numéro est lu. Tout caractère ne pouvant pas faire partie d'un nombre à virgule flottante entraînera l'arrêt de ce processus. Cette situation inclut les espaces blancs, la ponctuation (autres que les points) et les caractères autres que «E» ou «e». Enfin, le paramètre endptr est défini pour pointer vers le reste, le cas échéant, de la chaîne de caractères d'origine. Cela signifie que si strtod() est appelé avec "100.00 Gladir", la valeur 100.00 sera renvoyée et le paramètre endptr pointera vers l'espace précédant "Gladir".
- Si aucune conversion n'a lieu, zéro est renvoyé. En cas de dépassement de valeur, la fonction strtod() renvoie soit HUGE_VAL soit -HUGE_VAL (indiquant un dépassement positif ou négatif), et la variable globale errno est définie sur ERANGE, indiquant une erreur d'intervalle.
- Utilisation du paramètre endptr : Le paramètre endptr permet à l'utilisateur de savoir où s'est arrêtée la conversion dans la chaîne de caractères. Si endptr n'est pas nullptr, il pointera vers le premier caractère qui n'a pas été converti. Exemple :
- Gestion des erreurs de conversion : strtod gère les erreurs de conversion en renvoyant 0.0 si la chaîne ne commence pas par un nombre valide. Il est important de vérifier la valeur de endptr pour savoir si la conversion a été réussie, surtout si le résultat est 0.0, car cela pourrait aussi signifier un nombre valide dans certains cas. Exemple :
- Notation scientifique supportée : strtod prend en charge la notation scientifique, permettant de traiter des nombres comme 1.23e4 ou 5E-3, ce qui rend la fonction très utile pour lire des valeurs numériques dans des formats variés. Exemple :
- Sensible aux espaces et aux signes : strtod ignore les espaces au début de la chaîne, ce qui permet de traiter facilement les entrées avec des espaces indésirables. Il reconnaît également les signes plus et moins pour gérer les valeurs négatives ou positives. Exemple :
- Limites de la fonction : Si la chaîne de caractères représente un nombre dépassant la portée d'un double, strtod peut renvoyer HUGE_VAL ou HUGE_VALF pour un débordement positif, et -HUGE_VAL pour un débordement négatif. Les erreurs de dépassement peuvent également être détectées par le paramètre errno, qui sera réglé à ERANGE. Exemple :
- Pas de vérification des caractères suivants : Si la chaîne de caractères contient des caractères non numériques après un nombre valide, strtod ne renvoie que la partie numérique et ignore le reste, ce qui peut être utile mais nécessite une attention pour ne pas introduire des erreurs dans le traitement. Exemple :
- Alternative en C++ avec std::stod : En C++11 et versions ultérieures, il existe une alternative plus sûre et plus moderne : std::stod, faisant partie de la bibliothèque <string>. std::stod accepte une std::string et lève une exception (std::invalid_argument ou std::out_of_range) en cas d'erreur, offrant ainsi une gestion des erreurs plus robuste. Exemple :
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :

- #include <iostream>
- #include <cstdlib>
-
- int main()
- {
- char *s, *sr;
- s = "0";
- std::cout << "0 = " << strtod(s,&sr) << std::endl;
- s = "1";
- std::cout << "1 = " << strtod(s,&sr) << std::endl;
- s = "123";
- std::cout << "123 = " << strtod(s,&sr) << std::endl;
- s = "-123";
- std::cout << "-123 = " << strtod(s,&sr) << std::endl;
- s = "-123E";
- std::cout << "-123E = " << strtod(s,&sr) << std::endl;
- s = "-123G";
- std::cout << "-123G = " << strtod(s,&sr) << std::endl;
- s = "G";
- std::cout << "G = " << strtod(s,&sr) << std::endl;
- s = "123.45";
- std::cout << "123.45 = " << strtod(s,&sr) << std::endl;
- return 0;
- }
on obtiendra le résultat suivant :
0 = 01 = 1
123 = 123
-123 = -123
-123E = -123
-123G = -123
G = 0
123.45 = 123.45
Voir également
Langage de programmation - C++ - Référence procédures et fonctions - atof
Langage de programmation - C - Référence procédures et fonctions - strtod
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 735.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 267.
Dernière mise à jour : Lundi, le 3 août 2015