C ++ atof () - C ++ szabványos könyvtár

A C ++ - ban található atof () függvény a karakterlánc tartalmát lebegőpontos számként értelmezi, és az értékét kettősként adja vissza.

atof () prototípus

 kettős atof (const char * str);

A fejlécfájlban van meghatározva.

atof () Paraméterek

  • str - Karakterlánc, amely lebegőpontos számot képvisel.

atof () Visszatérési érték

Az atof () függvény visszatér:

  • kettős érték (amelyet a karakterláncból konvertálunk).
  • 0.0, ha nem lehet érvényes konverziót végrehajtani.

Ha az átalakított érték kívül esik a tartományon, akkor ez meghatározatlan viselkedést okoz.

1. példa: Hogyan működik az atof () függvény?

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

A program futtatásakor a kimenet a következő lesz:

 Szám karakterláncban = -32,40 Szám kettősben = -32,4 

Az atof () függvény érvényes lebegőpontos értéke egy opcionális + vagy - előjelből áll, amelyet a következő halmazok egyike követ:

  • Tízes lebegőpontos érték esetén:
    • Tizedesjegyek csoportja (0–9) , amely adott esetben tartalmazhat tizedespontot (.). Például: 9.056, -0.013 stb.
    • Opcionális kitevőrész ( evagy E), amelyet opcionális + vagy - jel követ, és a decimális számjegyek nem üres sorozata. Például: 1,23455e + 009, 5,23e-018 stb.
  • Hexadecimális lebegőpontos érték esetén:
    • A 0xvagy -vel kezdődő karakterlánc 0X, amelyet egy hexadecimális számjegyek nem üres sorozata követ, adott esetben tizedespontot (.) Tartalmazva. Például: 0xf1b, -0xb1b.51 stb.
    • Opcionális kitevőrész ( pvagy P), amelyet opcionális + vagy - jel követ, és a hexadecimális számjegyek nem üres sorozata. Például: 0x51c.23p5, -0x2a.3p-3 stb.
  • Végtelenség:
    • INFvagy INFINITY(eset figyelmen kívül hagyásával). Például: -iNf, INfINiTy stb.
  • NaN (nem szám):
    • NANvagy NANsequence(az eseteket figyelmen kívül hagyva), ahol a szekvencia olyan karaktersorozat, amely csak alfanumerikus karakterekből vagy az aláhúzásból áll (_). Az eredmény egy csendes NaN. Például: Nan, NaN12 stb.

2. példa: Hogyan működik az atof () exponensekkel és hexadecimálisokkal?

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

A program futtatásakor a kimenet a következő lesz:

 -44.01e-3 kettősre = -44.01 -44.01e-3 kettősre = -0.04401 0xf1bc kettősre = 61884 0xf1bc. 51 kettősre = 61884.3 

3. példa: az INFINITY és NaN esetei

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

A program futtatásakor a kimenet a következő lesz:

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

Általában az atof () függvény érvényes lebegőpontos argumentuma a következő formában van:

 (fehér szóköz) (- | +) (számjegy) (. számjegy) ((e | E) (- | +) számjegy)

Az atof () függvény mindaddig figyelmen kívül hagyja az összes vezető szóközt, amíg az elsődleges nem fehér szóköz megtalálható.

Ezután, ebből a karakterből kiindulva, a lehető legtöbb karakterre van szükség, amely érvényes lebegőpontos ábrázolást alkot, és lebegőpontos értékgé alakítja őket. Bármi, ami az utolsó érvényes karakter után marad a karakterláncból, figyelmen kívül marad, és nincs hatása az eredményre.

4. példa: atof () függvény szóközzel és záró karakterekkel

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

A program futtatásakor a kimenet a következő lesz:

 25,5-ig Dupla = 25,5 25,5-ig Dupla = 25,5 25,5 abcd-ig Double = 25,5 abcd 25,5-ig Double = 0 INFINITY

érdekes cikkek...