Funksjonen atof () i C ++ tolker innholdet i en streng som et flytende nummer og returnerer verdien som en dobbel.
atof () prototype
dobbel atof (const char * str);
Det er definert i topptekstfilen.
atof () Parametere
- str - En streng som representerer et flytende nummer.
atof () Returverdi
Funksjonen atof () returnerer:
- en dobbel verdi (som konverteres fra strengen).
- 0.0 hvis ingen gyldig konvertering kunne utføres.
Hvis den konverterte verdien er utenfor området, forårsaker den udefinert oppførsel.
Eksempel 1: Hvordan fungerer atof () -funksjonen?
#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 kjører programmet, vil utdataene være:
Antall i streng = -32,40 Antall i dobbel = -32,4
En gyldig flytepunktverdi for atof () -funksjonen består av et valgfritt + eller - tegn etterfulgt av ett av følgende sett:
- For desimalverdi med flytende punkt:
- En gruppe desimaltegn (0-9) , som eventuelt inneholder et desimaltegn (.). For eksempel: 9.056, -0.013, etc.
- En valgfri eksponentdel (
e
ellerE
) etterfulgt av et valgfritt + eller - tegn og en ikke-tom sekvens med desimaltegn. For eksempel: 1.23455e + 009, 5.23e-018, etc.
- For heksadesimal flytende punktverdi:
- En streng som begynner med
0x
eller0X
, etterfulgt av en ikke-tom sekvens av heksadesimale sifre, som eventuelt inneholder et desimaltegn (.). For eksempel: 0xf1b, -0xb1b.51, etc. - En valgfri eksponentdel (
p
ellerP
) etterfulgt av et valgfritt + eller - tegn og ikke-tom sekvens av heksadesimale sifre. For eksempel: 0x51c.23p5, -0x2a.3p-3, etc.
- En streng som begynner med
- Evighet:
INF
ellerINFINITY
(ignorerer saken). For eksempel: -iNf, INFINiTy, etc.
- NaN (ikke et tall):
NAN
ellerNANsequence
(ignorerer tilfelle) der sekvensen er en sekvens av tegn som bare består av alfanumeriske tegn eller understrekningen (_). Resultatet er en stille NaN. For eksempel: Nan, NaN12, etc.
Eksempel 2: Hvordan fungerer atof () med eksponenter og heksadesimaler?
#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 kjører programmet, vil utdataene være:
-44.01e-3 til dobbelt = -44.01 -44.01e-3 til dobbelt = -0.04401 0xf1bc til dobbelt = 61884 0xf1bc.51 til dobbelt = 61884.3
Eksempel 3: atof Cases for INFINITY og 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 kjører programmet, vil utdataene være:
INFINITY to Double = inf Inf to Double = inf Nan to Double = nan NAN to Double = nan
Generelt har et gyldig argument for flytende punkt for atof () -funksjonen følgende form:
(mellomrom) (- | +) (sifre) (. sifre) ((e | E) (- | +) sifre)
Funksjonen atof () ignorerer alle de ledende blanktegnene til det primære karakteren som ikke er mellomrom er funnet.
Fra dette tegnet tar det så mange tegn som mulig som danner en gyldig flytende representasjon og konverterer dem til en flytende verdi. Uansett hva som er igjen av strengen etter at det siste gyldige tegnet blir ignorert og har ingen innvirkning på resultatet.
Eksempel 4: atof () -funksjon med mellomrom og etterfølgende tegn
#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 kjører programmet, vil utdataene være:
25,5 til dobbelt = 25,5 25,5 til dobbelt = 25,5 25,5abcd til dobbelt = 25,5 abcd25,5 til dobbelt = 0 INFINITYabcd til dobbelt = inf INFINITY til dobbelt = inf Nanlll til dobbelt = nan