C ++ atof () - Biblioteca standard C ++

Funcția atof () din C ++ interpretează conținutul unui șir ca un număr în virgulă mobilă și îi returnează valoarea ca un dublu.

atof () prototip

 atof dublu (const char * str);

Este definit în fișierul antet.

atof () Parametri

  • str - Un șir care are reprezentarea unui număr în virgulă mobilă.

atof () Valoare returnată

Funcția atof () returnează:

  • o valoare dublă (care este convertită din șir).
  • 0,0 dacă nu s-a putut efectua o conversie validă.

Dacă valoarea convertită este în afara intervalului, aceasta provoacă un comportament nedefinit.

Exemplul 1: Cum funcționează funcția 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; ) 

Când rulați programul, ieșirea va fi:

 Număr în șir = -32,40 Număr în dublu = -32,4 

O valoare validă în virgulă mobilă pentru funcția atof () constă dintr-un semn opțional + sau - urmat de unul dintre următoarele seturi:

  • Pentru valoarea zecimală în virgulă mobilă:
    • Un grup de cifre zecimale (0-9) , care conține opțional un punct zecimal (.). De exemplu: 9.056, -0.013 etc.
    • O parte opțională a exponentului ( esau E) urmată de un semn opțional + sau - și o secvență ne-goală de cifre zecimale. De exemplu: 1.23455e + 009, 5.23e-018 etc.
  • Pentru valoarea hexadecimală în virgulă mobilă:
    • Un șir care începe cu 0xsau 0X, urmat de o secvență ne-goală de cifre hexazecimale, care conține opțional un punct zecimal (.). De exemplu: 0xf1b, -0xb1b.51 etc.
    • O parte opțională a exponentului ( psau P) urmată de un semn opțional + sau - și o secvență ne-goală de cifre hexazecimale. De exemplu: 0x51c.23p5, -0x2a.3p-3 etc.
  • Infinit:
    • INFsau INFINITY(ignorând cazul). De exemplu: -iNf, INFINiTy etc.
  • NaN (nu este un număr):
    • NANsau NANsequence(ignorând caz) în care secvența este o secvență de caractere constând numai din caractere alfanumerice sau subliniere (_). Rezultatul este un NaN liniștit. De exemplu: Nan, NaN12 etc.

Exemplul 2: Cum funcționează atof () cu exponenți și hexadecimali?

 #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; ) 

Când rulați programul, ieșirea va fi:

 -44.01e-3 la Dublu = -44.01 -44.01e-3 la Dublu = -0.04401 0xf1bc la Dublu = 61884 0xf1bc.51 la Dublu = 61884.3 

Exemplul 3: atof Cazuri pentru INFINITY și 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; ) 

Când rulați programul, ieșirea va fi:

 INFINITATE la Dublu = inf Inf la Dublu = inf Nan la Dublu = nan NAN la Dublu = nan

În general, un argument valid în virgulă mobilă pentru funcția atof () are următoarea formă:

 (spațiu alb) (- | +) (cifre) (.cifre) ((e | E) (- | +) cifre)

Funcția atof () ignoră toate caracterele din spațiul alb până când se găsește caracterul principal non-spațiu.

Apoi, începând de la acest caracter, este nevoie de cât mai multe caractere care formează o reprezentare validă în virgulă mobilă și le convertește într-o valoare în virgulă mobilă. Orice a rămas din șir după ultimul caracter valid este ignorat și nu are niciun efect asupra rezultatului.

Exemplul 4: funcția atof () cu spațiu alb și caractere finale

 #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; )

Când rulați programul, ieșirea va fi:

 25,5 la dublu = 25,5 25,5 la dublu = 25,5 25,5 abcd la dublu = 25,5 abcd 25,5 la dublu = 0 INFINITATE abcd la dublu = inf INFINITATE la dublu = inf Nanlll la dublu = nan

Articole interesante...