C ++ atof () - standardní knihovna C ++

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 ( enebo E) 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 0xnebo 0X, následovaný neprázdnou posloupností šestnáctkových číslic, volitelně obsahující desetinnou čárku (.). Například: 0xf1b, -0xb1b.51 atd.
    • Volitelná exponentová část ( pnebo P) následovaná volitelným znaménkem + nebo - a neprázdnou posloupností hexadecimálních číslic. Například: 0x51c.23p5, -0x2a.3p-3 atd.
  • Nekonečno:
    • INFnebo INFINITY(ignorování velkých a malých písmen). Například: -iNf, INfINiTy atd.
  • NaN (není číslo):
    • NANnebo NANsequence(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

Zajímavé články...