STRTOD |
Chaine à double |
---|---|
Langage C | stdlib.h |
Syntaxe
double strtod(const char *str1,char **fin); |
Paramètres
Nom | Description |
---|---|
str1 | Ce paramètre permet d'indiquer la chaîne de caractères ASCIZ contenant le nombre. |
fin | 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».
Algorithme
MODULE STRTOD(str, fin) Ignorer les espaces blancs au début de str SI un signe + ou - est trouvé ALORS Mémoriser le signe FIN SI Lire la partie entière de str (avant le point décimal), si présente Lire la partie décimale de str (après le point décimal), si présente SI la partie entière ou décimale est présente ALORS Calculer la valeur en base 10 de cette partie FIN SI SI un exposant est trouvé ALORS Traiter la partie exposant (si présente) et ajuster la valeur en conséquence FIN SI SI fin n'est pas NULL ALORS Assigner à fin l'adresse du caractère suivant la dernière partie numérique traitée FIN SI RETOURNE la valeur numérique obtenue |
Remarques
- Conversion flexible : strtod permet de convertir des chaînes de caractères contenant des nombres en format scientifique, ainsi que des nombres à virgule flottante en format décimal standard. Par exemple, elle peut convertir "3.14", "2e3" ou "-1.5e-2" en valeurs de type double. Cela la rend très utile pour traiter des nombres dans des formats divers, y compris des entrées utilisateur complexes.
- Pointeur fin : Le paramètre fin est un pointeur vers un pointeur de caractère. Après l'appel de strtod, *fin est mis à jour pour pointer vers le premier caractère non analysé après le nombre. Si la chaîne entière est analysée correctement, *fin pointera vers la fin de la chaîne de caractères. Si aucune conversion valide n'a eu lieu, *fin pointera vers le début de la chaîne de caractères. Cela permet de gérer les erreurs de conversion de manière plus détaillée.
- Comportement avec des chaînes de caractères invalides : Si la chaîne de caractères ne contient pas de nombre valide au début, strtod renverra 0.0 et fin pointera vers la chaîne d'entrée. Cela peut être utilisé pour vérifier si la conversion a échoué. Par exemple, si l'entrée est "abc", la fonction renverra 0.0 et *fin pointera vers "abc", indiquant qu'aucune conversion numérique n'a eu lieu.
- Gérer les erreurs de conversion : Lorsqu'un nombre invalide est rencontré après un nombre valide, strtod renverra la valeur partiellement convertie et mettra à jour fin pour pointer vers l'endroit où la conversion s'est arrêtée. Cela permet de détecter les erreurs de conversion ou de traiter une partie valide d'une chaîne de caractères. Par exemple, si l'entrée est "3.14abc", strtod renverra 3.14 et *fin pointera vers "abc".
- Comportement avec des valeurs extrêmes : Si la chaîne de caractères représente un nombre trop grand ou trop petit pour être représenté comme un double, strtod renverra HUGE_VAL, -HUGE_VAL, ou 0.0 selon le signe du nombre. Ces valeurs peuvent être utilisées pour détecter des dépassements de capacité lors de la conversion de chaînes de caractères représentant des nombres très grands ou très petits. Le comportement exact peut dépendre de l'implémentation de la bibliothèque standard.
- Sensibilité à la culture locale : Le format de la chaîne de caractères analysée peut être influencé par les paramètres de la locale. Par exemple, dans certaines locales, le séparateur décimal est une virgule (,), tandis que dans d'autres, c'est un point (.). Cela peut affecter le comportement de strtod si la chaîne contient des séparateurs de décimaux ou des notations scientifiques. Pour des conversions fiables indépendantes de la locale, il est recommandé d'utiliser des fonctions comme strtod_l en C11.
- Utilisation courante : strtod est fréquemment utilisée dans des programmes qui lisent des données numériques à partir de fichiers, de l'entrée standard ou de chaînes de texte. Elle est particulièrement utile pour analyser des fichiers de configuration, des données scientifiques, ou des valeurs de capteurs numériques, où les données peuvent être exprimées sous forme de chaînes mais doivent être traitées comme des nombres à virgule flottante dans le programme.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :
Essayer maintenant !
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- int main() {
- char *s, *sr;
- s = "0";
- printf("0 = %f\n",strtod(s,&sr));
- s = "1";
- printf("1 = %f\n",strtod(s,&sr));
- s = "123";
- printf("123 = %f\n",strtod(s,&sr));
- s = "-123";
- printf("-123 = %f\n",strtod(s,&sr));
- s = "-123E";
- printf("-123E = %f\n",strtod(s,&sr));
- s = "-123G";
- printf("-123G = %f\n",strtod(s,&sr));
- s = "G";
- printf("G = %i\n",strtod(s,&sr));
- s = "123.45";
- printf("123.45 = %f\n",strtod(s,&sr));
- return 0;
- }
on obtiendra le résultat suivant :
0 = 0.0000001 = 1.000000
123 = 123.000000
-123 = -123.000000
-123E = 0.000000
-123G = -123.000000
G = 0
123.45 = 123.450000
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 : Mardi, le 28 juillet 2015