Funkcia atof () v C ++ interpretuje obsah reťazca ako číslo s pohyblivou rádovou čiarkou a vráti jeho hodnotu ako dvojnásobok.
pred () prototyp
dvojnásobok (const char * str);
Je definované v hlavičkovom súbore.
atof () parametrov
- str - Reťazec, ktorý má reprezentáciu čísla s pohyblivou rádovou čiarkou.
atof () Vráti hodnotu
Funkcia atof () vráti:
- dvojnásobná hodnota (ktorá sa prevedie z reťazca).
- 0,0, ak nebolo možné vykonať platný prevod.
Ak je prevedená hodnota mimo rozsah, spôsobí to nedefinované správanie.
Príklad 1: Ako funguje funkcia 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; )
Po spustení programu bude výstup:
Počet v reťazci = -32,40 Počet v dvojnásobku = -32,4
Platná hodnota s pohyblivou rádovou čiarkou pre funkciu atof () pozostáva z voliteľného znamienka + alebo -, za ktorým nasleduje jedna z nasledujúcich množín:
- Pre desatinnú hodnotu s pohyblivou desatinnou čiarkou:
- Skupina desatinných číslic (0-9) , voliteľne obsahujúca desatinnú čiarku (.). Napríklad: 9,056, -0,013 atď.
- Voliteľná exponentová časť (
e
aleboE
), za ktorou nasleduje voliteľný znak + alebo - a neprázdna postupnosť desatinných číslic. Napríklad: 1,23455e + 009, 5,23e-018 atď.
- Pre hexadecimálnu hodnotu s pohyblivou rádovou čiarkou:
- Reťazec začínajúci na
0x
alebo0X
, za ktorým nasleduje neprázdna sekvencia šestnástkových číslic, voliteľne obsahujúca desatinnú čiarku (.). Napríklad: 0xf1b, -0xb1b.51 atď. - Voliteľná exponentová časť (
p
aleboP
), za ktorou nasleduje voliteľný znak + alebo - a neprázdna sekvencia hexadecimálnych číslic. Napríklad: 0x51c.23p5, -0x2a.3p-3 atď.
- Reťazec začínajúci na
- Nekonečno:
INF
aleboINFINITY
(ignorovanie veľkých a malých písmen). Napríklad: -iNf, INfINiTy atď.
- NaN (nie číslo):
NAN
aleboNANsequence
(ignorovanie malých a veľkých písmen), kde sekvencia je sekvencia znakov pozostávajúca iba z alfanumerických znakov alebo podčiarkovníka (_). Výsledkom je tichý NaN. Napríklad: Nan, NaN12 atď.
Príklad 2: Ako atof () pracuje s exponentmi a hexadecimálnymi číslami?
#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; )
Po spustení programu bude výstup:
-44,01e-3 na dvojnásobok = -44,01 -44,01e-3 na dvojnásobok = -0,04401 0xf1bc na dvojnásobok = 61884 0xf1bc.51 na dvojnásobok = 61884,3
Príklad 3: ďalšie prípady pre INFINITY a 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; )
Po spustení programu bude výstup:
INFINITY to Double = inf Inf to Double = inf Nan to Double = nan NAN to Double = nan
Platný argument s pohyblivou rádovou čiarkou pre funkciu atof () má vo všeobecnosti nasledujúcu formu:
(biele medzery) (- | +) (číslice) (. číslice) ((e | E) (- | +) číslice)
Funkcia atof () ignoruje všetky vedúce medzery, kým sa nenájde primárny znak bez medzier.
Potom, počnúc týmto znakom, trvá čo najviac znakov, ktoré vytvoria platné vyjadrenie s pohyblivou rádovou čiarkou a prevedú ich na hodnotu s pohyblivou desatinnou čiarkou. Čokoľvek, čo zostane z reťazca po poslednom platnom znaku, je ignorované a nemá to žiadny vplyv na výsledok.
Príklad 4: funkcia atof () s medzerami a koncovými znakmi
#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; )
Po spustení programu bude výstup:
25,5 až dvojnásobok = 25,5 25,5 až dvojnásobok = 25,5 25,5 abcd na dvojnásobok = 25,5 abcd 25,5 na dvojnásobok = 0 INFINITYabcd na dvojnásobok = inf INFINITY na dvojnásobok = inf Nanlll na dvojitý = nan