Funktionen atof () i C ++ fortolker indholdet af en streng som et flydende nummer og returnerer dens værdi som en dobbelt.
atof () prototype
dobbelt atof (const char * str);
Det er defineret i header-fil.
atof () Parametre
- str - En streng, der repræsenterer et flydende nummer.
atof () Returværdi
Funktionen atof () returnerer:
- en dobbelt værdi (som konverteres fra strengen).
- 0.0 hvis der ikke kunne udføres nogen gyldig konvertering.
Hvis den konverterede værdi er uden for området, forårsager den udefineret adfærd.
Eksempel 1: Hvordan fungerer 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ører programmet, vil output være:
Antal i streng = -32,40 Antal i dobbelt = -32,4
En gyldig flydende punktværdi for atof () -funktionen består af et valgfrit + eller - tegn efterfulgt af et af følgende sæt:
- For decimalværdi med flydende punkt:
- En gruppe decimalcifre (0-9) , der eventuelt indeholder et decimaltegn (.). For eksempel: 9.056, -0.013 osv.
- En valgfri eksponentdel (
e
ellerE
) efterfulgt af et valgfrit + eller - tegn og ikke-tom sekvens af decimaltal. For eksempel: 1.23455e + 009, 5.23e-018 osv.
- For hexadecimal floating-point-værdi:
- En streng startende med
0x
eller0X
efterfulgt af en ikke-tom sekvens af hexadecimale cifre, der eventuelt indeholder et decimaltegn (.). For eksempel: 0xf1b, -0xb1b.51 osv. - En valgfri eksponentdel (
p
ellerP
) efterfulgt af et valgfrit + eller - tegn og ikke-tom sekvens af hexadecimale cifre. For eksempel: 0x51c.23p5, -0x2a.3p-3 osv.
- En streng startende med
- Uendelighed:
INF
ellerINFINITY
(ignorerer sagen). For eksempel: -iNf, INFINiTy osv.
- NaN (ikke et tal):
NAN
ellerNANsequence
(ignorerer tilfælde), hvor sekvensen er en sekvens af tegn, der kun består af alfanumeriske tegn eller understregningen (_). Resultatet er et stille NaN. For eksempel: Nan, NaN12 osv.
Eksempel 2: Hvordan fungerer atof () med eksponenter og 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ører programmet, vil output 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 kører programmet, vil output være:
INFINITY til Double = inf Inf til Double = inf Nan til Double = nan NAN til Double = nan
Generelt har et gyldigt argument for flydende punkt for atof () -funktionen følgende form:
(mellemrum) (- | +) (cifre) (.cifre) ((e | E) (- | +) cifre)
Funktionen atof () ignorerer alle de ledende mellemrumstegn, indtil det primære ikke-hvide mellemrumstegn findes.
Derefter tager det så mange tegn som muligt fra denne karakter, der danner en gyldig repræsentation af flydende punkt og konverterer dem til en flydende punktværdi. Uanset hvad der er tilbage af strengen efter det sidste gyldige tegn ignoreres og har ingen indflydelse på resultatet.
Eksempel 4: atof () -funktion med hvidt mellemrum og efterfø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 kører programmet, vil output 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