C ++ atof () - C ++ - vakiokirjasto

Funktio atof () C ++: ssa tulkitsee merkkijonon sisällön liukuluvuna ja palauttaa sen arvon kaksinkertaiseksi.

atof () prototyyppi

 kaksinkertainen atof (const char * str);

Se määritetään otsikkotiedostossa.

atof () -parametrit

  • str - merkkijono, jolla on liukuluku.

atof () Palautusarvo

Atof () -funktio palauttaa:

  • kaksinkertainen arvo (joka muunnetaan merkkijonosta).
  • 0,0, jos kelvollista muunnosta ei voitu suorittaa.

Jos muunnettu arvo on alueen ulkopuolella, se aiheuttaa määrittelemätöntä käyttäytymistä.

Esimerkki 1: Kuinka funktio atof () toimii?

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

Kun suoritat ohjelmaa, tulos on:

 Numero merkkijonossa = -32,40 Numero tuplana = -32,4 

Toiminnon atof () kelvollinen liukuluku koostuu valinnaisesta + tai - -merkistä, jota seuraa yksi seuraavista sarjoista:

  • Desimaalinen liukulukuarvo:
    • Ryhmä desimaalilukuja (0-9) , joka mahdollisesti sisältää desimaalipilkun (.). Esimerkiksi: 9.056, -0.013 jne.
    • Valinnainen eksponenttiosa ( etai E), jota seuraa valinnainen + tai - -merkki ja ei-tyhjä desimaalijärjestys. Esimerkiksi: 1.23455e + 009, 5.23e-018 jne.
  • Heksadesimaalinen liukuluku:
    • Merkkijono, joka alkaa 0xtai 0X, jota seuraa ei-tyhjä heksadesimaalilukujen sarja, joka sisältää mahdollisesti desimaalipilkun (.). Esimerkiksi: 0xf1b, -0xb1b.51 jne.
    • Valinnainen eksponenttiosa ( ptai P), jota seuraa valinnainen + tai - -merkki ja ei-tyhjä heksadesimaalilukujen sarja. Esimerkiksi: 0x51c.23p5, -0x2a.3p-3 jne.
  • Ääretön:
    • INFtai INFINITY(huomioimatta tapausta). Esimerkiksi: -iNf, INFINiTy jne.
  • NaN (ei luku):
    • NANtai NANsequence(huomioimatta tapausta), jossa sekvenssi on merkkijono, joka koostuu vain aakkosnumeerisista merkeistä tai alaviivasta (_). Tuloksena on hiljainen NaN. Esimerkiksi: Nan, NaN12 jne.

Esimerkki 2: Kuinka atof () toimii eksponenttien ja heksadesimaalien kanssa?

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

Kun suoritat ohjelmaa, tulos on:

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

Esimerkki 3: INFINITY- ja NaN-tapaukset

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

Kun suoritat ohjelmaa, tulos on:

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

Yleensä atof () -funktion kelvollinen liukuluku-argumentti on seuraavassa muodossa:

 (välilyönti) (- | +) (numeroa) (. numeroa) ((e | E) (- | +) numeroa)

Atof () -funktio jättää huomiotta kaikki johtavat välilyönnin merkit, kunnes ensisijainen ei-tyhjämerkki löytyy.

Tällöin tästä merkistä alkaen tarvitaan mahdollisimman monta merkkiä, jotka muodostavat kelvollisen liukuluvun ja muuntaa ne liukulukuarvoksi. Merkkijonosta jäljellä oleva tieto viimeisen kelvollisen merkin jälkeen jätetään huomiotta, eikä sillä ole vaikutusta tulokseen.

Esimerkki 4: funktio atof (), jossa on välilyönti ja jäljellä olevat merkit

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

Kun suoritat ohjelmaa, tulos on:

 25,5 kaksinkertaiseksi = 25,5 25,5 kaksinkertaiseksi = 25,5 25,5abcd kaksinkertaiseksi = 25,5 abcd 25,5 kaksinkertaiseksi = 0 INFINITYABcd kaksinkertaiseksi = inf INFINITY kaksinkertaiseksi = inf Nanlll tuplaksi = nan

Mielenkiintoisia artikkeleita...