C ++ atof () - Libreria standard C ++

La funzione atof () in C ++ interpreta il contenuto di una stringa come un numero in virgola mobile e restituisce il suo valore come un double.

prototipo atof ()

 doppio atof (const char * str);

È definito nel file di intestazione.

atof () Parametri

  • str - Una stringa con la rappresentazione di un numero in virgola mobile.

atof () Restituisce il valore

La funzione atof () restituisce:

  • un valore doppio (che viene convertito dalla stringa).
  • 0.0 se non è stato possibile eseguire una conversione valida.

Se il valore convertito non rientra nell'intervallo, provoca un comportamento indefinito.

Esempio 1: come funziona la funzione 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; ) 

Quando esegui il programma, l'output sarà:

 Numero in stringa = -32,40 Numero in doppio = -32,4 

Un valore in virgola mobile valido per la funzione atof () è costituito da un segno + o - opzionale seguito da uno dei seguenti insiemi:

  • Per il valore a virgola mobile decimale:
    • Un gruppo di cifre decimali (0-9) , contenente facoltativamente un punto decimale (.). Ad esempio: 9.056, -0.013, ecc.
    • Una parte esponente facoltativa ( eo E) seguita da un segno + o - facoltativo e da una sequenza non vuota di cifre decimali. Ad esempio: 1.23455e + 009, 5.23e-018, ecc.
  • Per il valore in virgola mobile esadecimale:
    • Una stringa che inizia con 0xo 0X, seguita da una sequenza non vuota di cifre esadecimali, contenente facoltativamente un punto decimale (.). Ad esempio: 0xf1b, -0xb1b.51, ecc.
    • Una parte esponente opzionale ( po P) seguita da un segno + o - opzionale e una sequenza non vuota di cifre esadecimali. Ad esempio: 0x51c.23p5, -0x2a.3p-3, ecc.
  • Infinito:
    • INFo INFINITY(ignorando maiuscole e minuscole). Ad esempio: -iNf, INfINiTy, ecc.
  • NaN (non un numero):
    • NANo NANsequence(ignorando le maiuscole / minuscole) dove sequenza è una sequenza di caratteri composta solo da caratteri alfanumerici o dal trattino basso (_). Il risultato è un NaN silenzioso. Ad esempio: Nan, NaN12, ecc.

Esempio 2: come atof () funziona con esponenti ed esadecimali?

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

Quando esegui il programma, l'output sarà:

 Da -44.01e-3 a Double = -44.01 da -44.01e-3 a Double = -0.04401 Da 0xf1bc a Double = 61884 da 0xf1bc.51 a Double = 61884.3 

Esempio 3: atof Cases per INFINITY e 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; ) 

Quando esegui il programma, l'output sarà:

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

In generale, un argomento in virgola mobile valido per la funzione atof () ha la seguente forma:

 (spazi) (- | +) (cifre) (.digits) ((e | E) (- | +) cifre)

La funzione atof () ignora tutti i caratteri di spazi bianchi iniziali fino a quando non viene trovato il carattere principale diverso da spazi.

Quindi, a partire da questo carattere, prende il maggior numero di caratteri possibile che forma una valida rappresentazione in virgola mobile e li converte in un valore in virgola mobile. Tutto ciò che resta della stringa dopo l'ultimo carattere valido viene ignorato e non ha alcun effetto sul risultato.

Esempio 4: funzione atof () con spazi bianchi e caratteri finali

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

Quando esegui il programma, l'output sarà:

 Da 25,5 a Double = 25,5 Da 25,5 a Double = 25,5 Da 25,5abcd a Double = 25,5 abcd Da 25,5 a Double = 0 INFINITYabcd a Double = inf INFINITY a Double = inf Nanlll a Double = nan

Articoli interessanti...