C ++ atof () - Bibliothèque standard C ++

La fonction atof () en C ++ interprète le contenu d'une chaîne comme un nombre à virgule flottante et renvoie sa valeur comme un double.

prototype atof ()

 double atof (const char * str);

Il est défini dans le fichier d'en-tête.

Paramètres atof ()

  • str - Une chaîne ayant la représentation d'un nombre à virgule flottante.

atof () Valeur de retour

La fonction atof () renvoie:

  • une valeur double (qui est convertie à partir de la chaîne).
  • 0.0 si aucune conversion valide n'a pu être effectuée.

Si la valeur convertie est en dehors de la plage, cela provoque un comportement indéfini.

Exemple 1: Comment fonctionne la fonction atof ()?

 #include #include using namespace std; int main() ( char numberString() = "-32.40"; double numberInDouble; cout << "Number in String = " << numberString << endl; numberInDouble = atof(numberString); cout << "Number in Double = " << numberInDouble; return 0; ) 

Lorsque vous exécutez le programme, la sortie sera:

 Nombre en chaîne = -32,40 Nombre en double = -32,4 

Une valeur à virgule flottante valide pour la fonction atof () se compose d'un signe + ou - optionnel suivi de l'un des ensembles suivants:

  • Pour une valeur décimale à virgule flottante:
    • Un groupe de chiffres décimaux (0-9) , contenant éventuellement un point décimal (.). Par exemple: 9.056, -0.013, etc.
    • Une partie d'exposant facultative ( eou E) suivie d'un signe + ou - facultatif et d'une séquence non vide de chiffres décimaux. Par exemple: 1.23455e + 009, 5.23e-018, etc.
  • Pour une valeur à virgule flottante hexadécimale:
    • Une chaîne commençant par 0xou 0X, suivie d'une séquence non vide de chiffres hexadécimaux, contenant éventuellement un point décimal (.). Par exemple: 0xf1b, -0xb1b.51, etc.
    • Une partie d'exposant facultative ( pou P) suivie d'un signe + ou - facultatif et d'une séquence non vide de chiffres hexadécimaux. Par exemple: 0x51c.23p5, -0x2a.3p-3, etc.
  • Infini:
    • INFou INFINITY(sans tenir compte de la casse). Par exemple: -iNf, INfINiTy, etc.
  • NaN (pas un nombre):
    • NANou NANsequence(en ignorant la casse) où la séquence est une séquence de caractères composée uniquement de caractères alphanumériques ou du trait de soulignement (_). Le résultat est un NaN silencieux. Par exemple: Nan, NaN12, etc.

Exemple 2: Comment atof () fonctionne-t-il avec les exposants et les hexadécimaux?

 #include #include using namespace std; int main() ( cout << "-44.01e-3" << " to Double = " << atof("-44.01e-0") << endl; cout << "-44.01e-3" << " to Double = " << atof("-44.01e-3") << endl; cout << "0xf1bc" << " to Double = " << atof("0xf1bc") << endl; cout << "0xf1bc.51" << " to Double = " << atof("0xf1bc.51") << endl; return 0; ) 

Lorsque vous exécutez le programme, la sortie sera:

 -44.01e-3 à Double = -44.01 -44.01e-3 à Double = -0.04401 0xf1bc à Double = 61884 0xf1bc.51 à Double = 61884.3 

Exemple 3: atof Cases pour INFINITY et NaN

 #include #include using namespace std; int main() ( cout << "INFINITY" << " to Double = " << atof("INFINITY") << endl; cout << "Inf" << " to Double = " << atof("Inf") << endl; cout << "Nan" << " to Double = " << atof("Nan") << endl; cout << "NAN" << " to Double = " << atof("NAN") << endl; return 0; ) 

Lorsque vous exécutez le programme, la sortie sera:

 INFINITY to Double = inf Inf to Double = inf Nan to Double = nan NAN to Double = nan

En général, un argument en virgule flottante valide pour la fonction atof () a la forme suivante:

 (espace) (- | +) (chiffres) (.digits) ((e | E) (- | +) chiffres)

La fonction atof () ignore tous les caractères blancs de tête jusqu'à ce que le caractère non-blanc principal soit trouvé.

Ensuite, à partir de ce caractère, il prend autant de caractères que possible pour former une représentation à virgule flottante valide et les convertit en une valeur à virgule flottante. Ce qui reste de la chaîne après le dernier caractère valide est ignoré et n'a aucun effet sur le résultat.

Exemple 4: fonction atof () avec espaces et caractères de fin

 #include #include using namespace std; int main() ( cout << "25.5" << " to Double = " << atof(" 25.5") << endl; cout << "25.5 " << " to Double = " << atof(" 25.5 ") << endl; cout << "25.5abcd" << " to Double = " << atof("25.5abcd") << endl; // Returns 0 because of invalid conversion cout << "abcd25.5" << " to Double = " << atof("abcd25.5") << endl; // Rules for whitespace and trailing character also apply for infinity and Nan cout << "INFINITYabcd" << " to Double = " << atof("INFINITYabcd") << endl; cout << "INFINITY" << " to Double = " << atof(" INFINITY") << endl; cout << "Nanlll" << " to Double = " << atof("Nanlll") << endl; return 0; )

Lorsque vous exécutez le programme, la sortie sera:

 25,5 à Double = 25,5 25,5 à Double = 25,5 25,5abcd à Double = 25,5 abcd25,5 à Double = 0 INFINITYabcd à Double = inf INFINITY à Double = inf Nanlll à Double = nan

Articles intéressants...