C ++ atof () - C ++ standartinė biblioteka

Funkcija atof () C ++ interpretuoja eilutės turinį kaip slankiojo kablelio skaičių ir grąžina jos vertę kaip dvigubą.

atof () prototipas

 dvigubas atofas ​​(const char * str);

Tai apibrėžta antraštės faile.

atof () parametrai

  • str - eilutė, turinti slankiojo kablelio skaičių.

atof () Grąžinimo vertė

Funkcija atof () grąžina:

  • dviguba reikšmė (kuri konvertuojama iš eilutės).
  • 0.0, jei negalėtų būti atliktas galiojantis konversija.

Jei konvertuota vertė yra už diapazono ribų, tai sukelia neapibrėžtą elgesį.

1 pavyzdys: Kaip veikia atof () funkcija?

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

Kai paleisite programą, išvestis bus:

 Skaičius eilutėje = ​​-32,40 Skaičius dvigubai = -32,4 

Galiojančią atof () funkcijos slankiojo kablelio vertę sudaro pasirinktinis ženklas „+“ arba „-“, po kurio pateikiamas vienas iš šių rinkinių:

  • Dešimtainė slankiojo kablelio vertė:
    • Dešimtainių skaitmenų grupė (0–9) , pasirinktinai turinti dešimtainį kablelį (.). Pvz .: 9.056, -0.013 ir kt.
    • Pasirenkama eksponento dalis ( earba E), po kurios pasirenkamas ženklas „+“ arba „“ ir tuščia dešimtainių skaitmenų seka. Pvz .: 1.23455e + 009, 5.23e-018 ir kt.
  • Skaičiuojant šešioliktainę slankiojo kablelio vertę:
    • Eilutė, prasidedanti 0xarba 0X, po kurios seka ne tuščia šešioliktainių skaitmenų seka, pasirinktinai turinti dešimtainį tašką (.). Pavyzdžiui: 0xf1b, -0xb1b.51 ir kt.
    • Pasirenkama eksponento dalis ( parba P), po kurios pasirenkamas ženklas „+“ arba „“ ir ne tuščia šešioliktainių skaitmenų seka. Pavyzdžiui: 0x51c.23p5, -0x2a.3p-3 ir kt.
  • Begalybė:
    • INFarba INFINITY(neatsižvelgiant į atvejį). Pavyzdžiui: -iNf, INfINiTy ir kt.
  • NaN (ne skaičius):
    • NANarba NANsequence(neatsižvelgiant į atvejį), kai seka yra simbolių seka, susidedanti tik iš raidinių ir skaitinių simbolių arba pabraukimo (_). Rezultatas yra tylus NaN. Pavyzdžiui: Nan, NaN12 ir kt.

2 pavyzdys: Kaip atof () veikia su rodikliais ir šešioliktainiais?

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

Kai paleisite programą, išvestis bus:

 -44.01e-3 į dvigubą = -44.01 -44.01e-3 į dvigubą = -0.04401 0xf1bc į dvigubą = 61884 0xf1bc. 51 į dvigubą = 61884.3 

3 pavyzdys: INFINITY ir NaN atvejų atvejai

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

Kai paleisite programą, išvestis bus:

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

Apskritai galiojantis atof () funkcijos slankiojo kablelio argumentas yra tokios formos:

 (tarpai) (- | +) (skaitmenys) (. skaitmenys) ((e | E) (- | +) skaitmenys)

Funkcija atof () ignoruoja visus pagrindinius tarpų simbolius, kol bus rastas pagrindinis ne tarpų simbolis.

Tada, pradedant nuo šio simbolio, reikia kuo daugiau simbolių, kurie suformuoja galiojantį slankiojo kablelio vaizdą ir paverčia juos slankiojo kablelio verte. Nepaisant to, kas lieka eilutėje po paskutinio galiojančio simbolio, tai neturi įtakos rezultatui.

4 pavyzdys: funkcija atof () su tarpais ir baigiamaisiais simboliais

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

Kai paleisite programą, išvestis bus:

 25,5 - dvigubai = 25,5 - 25,5 - 25,5 - dvigubai = 25,5 25,5 abcd - dvigubai = 25,5 abcd 25,5 - dvigubai = 0 INFINITY abcd - dvigubai = inf INFINITY dvigubai = inf

Įdomios straipsniai...