C ++ atof () - C ++ standaardbibliotheek

De functie atof () in C ++ interpreteert de inhoud van een tekenreeks als een getal met drijvende komma en retourneert de waarde ervan als een dubbele.

atof () prototype

 dubbele atof (const char * str);

Het wordt gedefinieerd in het header-bestand.

atof () Parameters

  • str - Een tekenreeks met de weergave van een getal met drijvende komma.

atof () Retourwaarde

De functie atof () retourneert:

  • een dubbele waarde (die wordt geconverteerd uit de string).
  • 0.0 als er geen geldige conversie kon worden uitgevoerd.

Als de geconverteerde waarde buiten het bereik valt, veroorzaakt dit ongedefinieerd gedrag.

Voorbeeld 1: hoe werkt de atof () -functie?

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

Wanneer u het programma uitvoert, is de uitvoer:

 Getal in String = -32,40 Getal in Double = -32.4 

Een geldige drijvende-kommawaarde voor de functie atof () bestaat uit een optioneel + of - teken gevolgd door een van de volgende sets:

  • Voor decimale drijvende-kommawaarde:
    • Een groep decimale cijfers (0-9) , eventueel met een decimale punt (.). Bijvoorbeeld: 9.056, -0.013, etc.
    • Een optioneel exponentgedeelte ( eof E) gevolgd door een optioneel + of - teken en een niet-lege reeks decimale cijfers. Bijvoorbeeld: 1.23455e + 009, 5.23e-018, etc.
  • Voor hexadecimale drijvende-kommawaarde:
    • Een tekenreeks die begint met 0xof 0X, gevolgd door een niet-lege reeks hexadecimale cijfers, eventueel met een decimale punt (.). Bijvoorbeeld: 0xf1b, -0xb1b.51, etc.
    • Een optioneel exponentgedeelte ( pof P) gevolgd door een optioneel + of - teken en een niet-lege reeks hexadecimale cijfers. Bijvoorbeeld: 0x51c.23p5, -0x2a.3p-3, etc.
  • Oneindigheid:
    • INFof INFINITY(hoofdlettergebruik negerend). Bijvoorbeeld: -iNf, INfINiTy, etc.
  • NaN (geen nummer):
    • NANof NANsequence(waarbij hoofdletters / kleine letters worden genegeerd) waarbij reeks een reeks tekens is die alleen uit alfanumerieke tekens of het onderstrepingsteken (_) bestaat. Het resultaat is een rustige NaN. Bijvoorbeeld: Nan, NaN12, etc.

Voorbeeld 2: Hoe werkt atof () met exponenten en hexadecimalen?

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

Wanneer u het programma uitvoert, is de uitvoer:

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

Voorbeeld 3: atof Cases voor INFINITY en 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; ) 

Wanneer u het programma uitvoert, is de uitvoer:

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

Over het algemeen heeft een geldig argument met drijvende komma voor de functie atof () de volgende vorm:

 (witruimte) (- | +) (cijfers) (.cijfers) ((e | E) (- | +) cijfers)

De functie atof () negeert alle leidende witruimtetekens totdat het primaire niet-witruimteteken is gevonden.

Vervolgens, uitgaande van dit teken, zijn er zoveel mogelijk tekens nodig die een geldige drijvende-kommawaarde vormen en deze omzetten in een drijvende-kommawaarde. Wat er overblijft van de string na het laatste geldige teken wordt genegeerd en heeft geen effect op het resultaat.

Voorbeeld 4: atof () functie met witruimte en volg tekens

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

Wanneer u het programma uitvoert, is de uitvoer:

 25,5 tot verdubbelen = 25,5 25,5 tot verdubbelen = 25,5 25,5abcd tot verdubbelen = 25,5 abcd 25,5 tot verdubbelen = 0 INFINITYabcd tot verdubbelen = inf INFINITY tot verdubbelen = inf Nanlll tot verdubbelen = nan

Interessante artikelen...