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 (
e
sauE
) 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
0x
sau0X
, 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 (
p
sauP
) urmată de un semn opțional + sau - și o secvență ne-goală de cifre hexazecimale. De exemplu: 0x51c.23p5, -0x2a.3p-3 etc.
- Un șir care începe cu
- Infinit:
INF
sauINFINITY
(ignorând cazul). De exemplu: -iNf, INFINiTy etc.
- NaN (nu este un număr):
NAN
sauNANsequence
(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