ATOF |
Alpha à Virgule flottante |
---|---|
Langage C | stdlib.h |
Syntaxe
double atof(const char *str) |
Paramètres
Nom | Description |
---|---|
str | Ce paramètre permet d'indiquer la chaîne de caractères à convertir |
Description
Cette fonction convertie une chaîne de caractères en une valeur «float».
Algorithme
* Entrée : Une chaîne de caractères str représentant un nombre décimal * Sortie : Un nombre flottant (double) MODULE ATOF(str) Initialiser index ← 0 Initialiser résultat ← 0.0 Initialiser signe ← 1 Initialiser facteur_decimal ← 0.1 * Ignorer les espaces blancs initiaux BOUCLE TANT QUE str[index] est un espace blanc FAIRE Incrémenter index FIN BOUCLE TANT QUE * Vérifier le signe SI str[index] = '-' ALORS signe ← -1 Incrémenter index SINON SI str[index] = '+' ALORS Incrémenter index FIN SI * Lire les chiffres avant le point décimal BOUCLE TANT QUE str[index] est un chiffre FAIRE résultat ← (résultat x 10) + (valeur numérique de str[index]) Incrémenter index FIN BOUCLE TANT QUE * Lire les chiffres après le point décimal SI str[index] = '.' ALORS Incrémenter index BOUCLE TANT QUE str[index] est un chiffre FAIRE résultat ← résultat + (valeur numérique de str[index]) x facteur_decimal facteur_decimal ← facteur_decimal / 10 Incrémenter index FIN BOUCLE TANT QUE FIN SI RETOURNE résultat x signe |
Remarques
- La conversion de la valeur contenu dans la chaîne de caractères s'arrête aussitôt que l'analyse ne trouve plus de chiffres.
- Conversion de chaîne en nombre flottant : La fonction atof (ASCII to Float) convertit une chaîne de caractères en un nombre à virgule flottante de type double. Par exemple, la chaîne de caractères "123.45" sera transformée en le nombre 123.45. Cependant, elle ne gère pas les erreurs si la chaîne de caractères contient des caractères non numériques.
- Limitation dans la gestion des erreurs : Contrairement à strtod, la fonction atof ne permet pas de détecter les erreurs telles que les chaînes mal formées. Si une chaîne ne commence pas par une représentation valide de nombre flottant, le comportement peut être imprévisible, retournant souvent 0.0.
- Compatibilité avec les espaces blancs : atof ignore les espaces blancs initiaux de la chaîne avant de commencer la conversion. Par exemple, la chaîne de caractères " 3.14" sera correctement convertie en 3.14.
- Non-sécurisée et déconseillée : La fonction atof est considérée comme obsolète et non sécurisée dans les projets modernes en C. Il est recommandé d'utiliser strtod, qui offre un contrôle plus précis et la possibilité de détecter les erreurs via un pointeur de fin.
- Sensibilité aux locales : La conversion réalisée par atof peut dépendre des paramètres régionaux du système, notamment pour les caractères comme le point ou la virgule comme séparateur décimal. Cela peut provoquer des incohérences dans les programmes multi-régionaux.
- Gestion limitée des exceptions : atof ne fournit aucun mécanisme pour détecter les dépassements (overflow) ou sous-dépassements (underflow) des valeurs flottantes. Si la valeur dépasse l'intervalle de double, elle retournera soit HUGE_VAL soit 0.0 selon le cas.
- Influence sur les performances : atof est généralement rapide pour des conversions simples, mais son manque de robustesse peut entraîner des bogues subtils et coûteux à corriger. Son utilisation est déconseillée dans des applications nécessitant des conversions fiables ou performantes.
- Prise en charge des notations scientifiques : atof prend en charge les notations scientifiques telles que "1.23e4", étant converties en 12300.0. Cependant, elle ne valide pas que le format soit strictement conforme à la norme, ce qui peut entraîner des erreurs dans certains cas.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :
Essayer maintenant !
on obtiendra le résultat suivant :
atof('12')=12.000000atof('13.14')=13.140000
atof('-7')=-7.000000
atof('-7E-05')=-0.000070
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - atof
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 730.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 33.
Dernière mise à jour : Mardi, le 28 juillet 2015