C ++ strtod () - C ++ Standardbibliotek

Funktionen strtod () i C ++ fortolker indholdet af en streng som et flydende nummer og returnerer dets værdi som en dobbelt.

Denne funktion indstiller også en markør til at pege på det første tegn efter strengens sidste gyldige tegn, hvis der er nogen, ellers er markøren indstillet til null.

For base 10 og strengen "12abc"

Gyldig numerisk del -> 12

Første tegn efter gyldig numerisk del -> a

Det er defineret i header-fil.

strtod () prototype

 dobbelt strtod (const char * str, char ** ende);

Funktionen strtod () tager streng og en markør til karakter som parameter, fortolker strengens indhold som et floattal og returnerer en doubleværdi.

strtod () Parametre

  • str : En streng med repræsentation af et flydende nummer.
  • slut : Henvisning til et allerede tildelt objekt af typen char *. Værdien af ​​slut indstilles af funktionen til næste tegn i str efter det sidste gyldige tegn. Denne parameter kan også være en nul pointer, i hvilket tilfælde den ikke bruges.

strtod () Returværdi

Funktionen strtod () 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, opstår der en områdefejl, og en positiv eller negativ HUGE_VAL returneres.

Eksempel 1: Hvordan fungerer strtod () -funktionen?

 #include #include using namespace std; int main() ( char numberString() = "12.44b 0xy"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl; return 0; ) 

Når du kører programmet, vil output være:

 Antal i slutstreng = 12.44b 0xy Nummer i dobbelt = 12.44 Streng = b 0xy

Eksempel 2: funktion strtod () uden efterfølgende tegn

 #include #include using namespace std; int main() ( char numberString() = "12.44"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; // If end is not Null if (*end) ( cout << end; ) // If end is Null else ( cout << "Null pointer"; ) return 0; ) 

Når du kører programmet, vil output være:

 Nummer i slutstreng = 12.44b 0xy-nummer i dobbelt = 12.44 Nul pointer

En gyldig flydende punktværdi for strtod () -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: 13.170, -5.63 osv.

    • En valgfri eksponentdel (e eller E) efterfulgt af et valgfrit + eller - tegn og ikke-tom sekvens af decimaltal.
      For eksempel: 3.46101e + 007, 13.19e-013 osv.

  • For hexadecimal floating-point-værdi :

    • En streng, der starter med 0x eller 0X, efterfulgt af en ikke-tom sekvens af hexadecimale cifre, der eventuelt indeholder et decimaltegn (.).
      For eksempel: 0xfa5, -0xb1f.24 osv.

    • En valgfri eksponentdel (p eller P) efterfulgt af et valgfrit + eller - tegn og ikke-tom sekvens af hexadecimale cifre.
      For eksempel: 0x51c.23p5, -0x2a.3p-3 osv.

  • Uendelighed :

    • INF eller INFINITY (ignorerer tilfælde).
      For eksempel: -Inf, InfiNiTy osv.

  • NaN (ikke et tal) :

    • NAN eller NAN-konsekvens (ignorerende 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, NaNab1 osv.

Eksempel 3: Hvordan strtod () fungerer med eksponenter og hexadecimaler?

 #include #include #include using namespace std; int main() ( // initialize a exponential value char numberString() = "-44.01e-3End String"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl << endl; // initialize a new hexadecimal value strcpy(numberString,"0xf1bc.51hello"); number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl; return 0; ) 

Når du kører programmet, vil output være:

 Nummer i streng = -44.01e-3End streng nummer i dobbelt = -0.04401 slutstreng = slutstreng nummer i streng = 0xf1bc.51 hej nummer i dobbelt = 61884.3 slutstreng = hej

Eksempel 4: strtod Cases for INFINITY og NaN

 #include #include using namespace std; int main() ( char *end; cout << "INFINITY" << " to Double = " << strtod("INFINITY", &end) << endl; cout << "End String = " << end << endl << endl; cout << "Infabc" << " to Double = " << strtod("Infabc", &end) << endl; cout << "End String = " << end << endl << endl; cout << "NaN12a" << " to Double = " << strtod("NaN12a", &end) << endl; cout << "End String = " << end << endl << endl; return 0; ) 

Når du kører programmet, vil output være:

 INFINITY til dobbelt = inf slutstreng = Infabc til dobbelt = inf slutstreng = abc NaN12a til dobbelt = nan slutstreng = 12a

Generelt har et gyldigt argument for flydende punkt for strtod () -funktionen følgende form:

(mellemrum) (- | +) (cifre) (.cifre) ((e | E) (- | +) cifre)

Funktionen strtod () ignorerer alle de ledende blanktegn, 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 at det sidste gyldige tegn er gemt i det objekt, der er peget ved slutningen.

Eksempel 5: strtod () -funktion med ledende mellemrum

 #include #include using namespace std; int main() ( char *end; cout << "25.5" << " to Double = " << strtod(" 25.5", &end) << endl; // end pointer is set to null cout << "End String = " << end << endl << endl; // Returns 0 because of invalid conversion cout << "abc11.20" << " to Double = " << strtod("abc11.20", &end) << endl; cout << "End String = " << end << endl << endl; return 0; ) 

Når du kører programmet, vil output være:

 25,5 til dobbelt = 25,5 slutstreng = abc11.20 til dobbelt = 0 slutstreng = abc11.20

Interessante artikler...