C ++ atof () - C ++ Standardbibliotek

Funktionen atof () i C ++ tolkar innehållet i en sträng som ett flytande nummer och returnerar dess värde som en dubbel.

atof () prototyp

 dubbel atof (const char * str);

Det definieras i rubrikfilen.

atof () Parametrar

  • str - En sträng som representerar ett flytpunktsnummer.

atof () Returvärde

Funktionen atof () returnerar:

  • ett dubbelvärde (som omvandlas från strängen).
  • 0.0 om ingen giltig konvertering kunde utföras.

Om det konverterade värdet ligger utanför intervallet orsakar det odefinierat beteende.

Exempel 1: Hur fungerar atof () -funktionen?

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

När du kör programmet blir resultatet:

 Antal i sträng = -32,40 Antal i dubbel = -32,4 

Ett giltigt flytpunktsvärde för atof () -funktionen består av ett valfritt + eller - tecken följt av en av följande uppsättningar:

  • För decimalt flytande punktvärde:
    • En grupp decimalsiffror (0-9) , valfritt innehållande en decimal (.). Till exempel: 9.056, -0.013, etc.
    • En valfri exponentdel ( eeller E) följt av ett valfritt + eller - tecken och icke-tom sekvens av decimalsiffror. Till exempel: 1.23455e + 009, 5.23e-018, etc.
  • För hexadecimalt flytpunkt:
    • En sträng som börjar med 0xeller 0X, följt av en icke-tom sekvens av hexadecimala siffror, som eventuellt innehåller en decimalpunkt (.). Till exempel: 0xf1b, -0xb1b.51, etc.
    • En valfri exponentdel ( peller P) följt av ett valfritt + eller - tecken och en icke-tom sekvens av hexadecimala siffror. Till exempel: 0x51c.23p5, -0x2a.3p-3, etc.
  • Oändlighet:
    • INFeller INFINITY(ignorerar fall). Till exempel: -iNf, INfINiTy, etc.
  • NaN (inte ett nummer):
    • NANeller NANsequence(ignorerar fall) där sekvensen är en sekvens av tecken som endast består av alfanumeriska tecken eller understrykningen (_). Resultatet är en tyst NaN. Till exempel: Nan, NaN12, etc.

Exempel 2: Hur fungerar atof () med exponenter och hexadecimaler?

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

När du kör programmet blir resultatet:

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

Exempel 3: av Fall för INFINITY och 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; ) 

När du kör programmet blir resultatet:

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

I allmänhet har ett giltigt argument för flytande punkt för atof () -funktionen följande form:

 (mellanslag) (- | +) (siffror) (. siffror) ((e | E) (- | +) siffror)

Funktionen atof () ignorerar alla de ledande blankstegstecknen tills det primära teckenet som inte är mellanslag hittas.

Från och med denna karaktär tar det så många tecken som möjligt som bildar en giltig flytpunktsrepresentation och konverterar dem till ett flytpunktsvärde. Oavsett vad som är kvar av strängen efter att den sista giltiga karaktären ignoreras och har ingen inverkan på resultatet.

Exempel 4: atof () -funktion med mellanslag och efterföljande tecken

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

När du kör programmet blir resultatet:

 25,5 till dubbel = 25,5 25,5 till dubbel = 25,5 25,5abcd till dubbel = 25,5 abcd25,5 till dubbel = 0 INFINITYabcd till dubbel = inf INFINITY till dubbel = inf Nanlll till dubbel = nan

Intressanta artiklar...