Funkce atof () v C ++ interpretuje obsah řetězce jako číslo s plovoucí desetinnou čárkou a vrátí jeho hodnotu jako dvojitý.
atof () prototyp
double atof (const char * str);
Je definován v hlavičkovém souboru.
atof () parametry
- str - Řetězec mající reprezentaci čísla s plovoucí desetinnou čárkou.
atof () Vrátí hodnotu
Funkce atof () vrací:
- dvojitá hodnota (která je převedena z řetězce).
- 0,0, pokud nelze provést platný převod.
Pokud je převedená hodnota mimo rozsah, způsobí to nedefinované chování.
Příklad 1: Jak funguje funkce 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; )
Když spustíte program, výstup bude:
Number in String = -32.40 Number in Double = -32.4
Platná hodnota s plovoucí desetinnou čárkou pro funkci atof () se skládá z volitelného znaménka + nebo - následovaného jednou z následujících sad:
- Pro desetinnou hodnotu s plovoucí desetinnou čárkou:
- Skupina desetinných míst (0-9) , volitelně obsahující desetinnou čárku (.). Například: 9,056, -0,013 atd.
- Volitelná exponentová část (
e
neboE
) následovaná volitelným znaménkem + nebo - a neprázdnou posloupností desetinných míst. Například: 1.23455e + 009, 5,23e-018 atd.
- Pro hexadecimální hodnotu s plovoucí desetinnou čárkou:
- Řetězec začínající na
0x
nebo0X
, následovaný neprázdnou posloupností šestnáctkových číslic, volitelně obsahující desetinnou čárku (.). Například: 0xf1b, -0xb1b.51 atd. - Volitelná exponentová část (
p
neboP
) následovaná volitelným znaménkem + nebo - a neprázdnou posloupností hexadecimálních číslic. Například: 0x51c.23p5, -0x2a.3p-3 atd.
- Řetězec začínající na
- Nekonečno:
INF
neboINFINITY
(ignorování velkých a malých písmen). Například: -iNf, INfINiTy atd.
- NaN (není číslo):
NAN
neboNANsequence
(ignorování malých a velkých písmen), kde sekvence je sekvence znaků skládající se pouze z alfanumerických znaků nebo podtržítka (_). Výsledkem je tichý NaN. Například: Nan, NaN12 atd.
Příklad 2: Jak atof () pracuje s exponenty a hexadecimálními čísly?
#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; )
Když spustíte program, výstup bude:
-44,01e-3 na dvojitý = -44,01 -44,01e-3 na dvojitý = -0,04401 0xf1bc na dvojitý = 61884 0xf1bc.51 na dvojitý = 61884,3
Příklad 3: atof Cases for INFINITY and 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; )
Když spustíte program, výstup bude:
INFINITY to Double = inf Inf to Double = inf Nan to Double = nan NAN to Double = nan
Platný argument s plovoucí desetinnou čárkou pro funkci atof () má obecně následující formu:
(mezery) (- | +) (číslice) (. číslice) ((e | E) (- | +) číslice)
Funkce atof () ignoruje všechny úvodní prázdné znaky, dokud není nalezen primární znak bez mezer.
Poté, počínaje tímto znakem, trvá co nejvíce znaků, které tvoří platnou reprezentaci s plovoucí desetinnou čárkou a převádí je na hodnotu s plovoucí desetinnou čárkou. Cokoli, co zbylo z řetězce po posledním platném znaku, je ignorováno a nemá to žádný vliv na výsledek.
Příklad 4: Funkce atof () s mezerami a koncovými znaky
#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; )
Když spustíte program, výstup bude:
25,5 až Double = 25,5 25,5 až Double = 25,5 25,5 abcd až Double = 25,5 abcd 25,5 až Double = 0 INFINITYabcd až Double = inf INFINITY to Double = inf Nanlll to Double = nan