A strtod () függvény a C ++ nyelven egy karakterlánc tartalmát lebegőpontos számként értelmezi, és az értékét kettősként adja vissza.
Ez a függvény egy olyan mutatót is beállít, amely a karakterlánc utolsó érvényes karaktere után az első karakterre mutat, ha van ilyen, különben a mutató nullára van állítva.
A 10. alaphoz és a "12abc" karakterlánchoz
Érvényes numerikus rész -> 12
Első karakter az érvényes numerikus rész után -> a
A fejlécfájlban van meghatározva.
strtod () prototípus
kettős strtod (const char * str, char ** end);
Az strtod () függvény a karakterláncot és a karakterre mutató mutatót veszi paraméterül, a karakterlánc tartalmát float
számként értelmezi és double
értéket ad vissza .
strtod () Paraméterek
- str : Karakterlánc, amely lebegőpontos számot képvisel.
- vége : Hivatkozás egy már lefoglalt char * típusú objektumra. A vég értékét a függvény a következő karakterre állítja be az utolsó érvényes karakter után. Ez a paraméter lehet egy null mutató is, ebben az esetben nem használják.
strtod () Visszatérési érték
Az strtod () függvény visszatér:
- kettős érték (amelyet a karakterláncból konvertálunk).
- 0.0, ha nem lehet érvényes konverziót végrehajtani.
Ha az átalakított érték kívül esik a tartományon, akkor tartományi hiba lép fel, és pozitív vagy negatív HUGE_VAL értéket ad vissza.
1. példa: Hogyan működik az strtod () függvény?
#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; )
A program futtatásakor a kimenet a következő lesz:
Szám a végső karakterláncban = 12,44b 0xy Szám kettősben = 12,44 karakterlánc = b 0xy
2. példa: strtod () függvény karakterek nélkül
#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; )
A program futtatásakor a kimenet a következő lesz:
Szám a végső karakterláncban = 12,44b 0xy szám kettősben = 12,44 Null mutató
Az strtod () függvény érvényes lebegőpontos értéke egy opcionális + vagy - előjelből áll, amelyet a következő halmazok valamelyike követ:
-
Tízes lebegőpontos érték esetén :
-
Tizedesjegyek csoportja (0–9), amely adott esetben tartalmaz egy tizedespontot (.).
Például: 13.170, -5.63 stb. -
Választható kitevőrész (e vagy E), amelyet egy opcionális + vagy - jel követ, és a decimális számjegyek nem üres sorozata.
Például: 3,46101e + 007, 13,19e-013 stb.
-
-
Hexadecimális lebegőpontos érték esetén :
-
0x vagy 0X kezdetű karakterlánc, amelyet a hexadecimális számjegyek nem üres szekvenciája követ, amely adott esetben tizedespontot (.) Tartalmaz.
Például: 0xfa5, -0xb1f.24 stb. -
Opcionális kitevőrész (p vagy P), amelyet opcionális + vagy - jel követ, és a hexadecimális számjegyek nem üres sorozata.
Például: 0x51c.23p5, -0x2a.3p-3 stb.
-
-
Végtelen :
-
INF vagy VÉGTELEN (figyelmen kívül hagyva az esetet).
Például: -Inf, InfiNiTy stb.
-
-
NaN (nem szám) :
-
NAN vagy NANsequence (a kis- és nagybetűk figyelmen kívül hagyása), ahol a szekvencia csak alfanumerikus karakterekből vagy aláhúzásból (_) álló karaktersorozat. Az eredmény egy csendes NaN.
Például: Nan, NaNab1 stb.
-
3. példa: Hogyan működik az strtod () hatványokkal és hexadecimálisokkal?
#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; )
A program futtatásakor a kimenet a következő lesz:
Szám stringben = -44.01e-3End karakterlánc száma kettősben = -0.04401 Végső karakterlánc = Végső karakterlánc száma stringben = 0xf1bc.51 helló szám kettősben = 61884.3 Vég karakterlánc = helló
4. példa: strtod esetek az INFINITY és a NaN esetében
#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; )
A program futtatásakor a kimenet a következő lesz:
INFINITY to Double = inf End String = Infabc to Double = inf End String = abc NaN12a to Double = nan End String = 12a
Általában az strtod () függvény érvényes lebegőpontos argumentuma a következő formában van:
(fehér szóköz) (- | +) (számjegy) (. számjegy) ((e | E) (- | +) számjegy)
Az strtod () függvény mindaddig figyelmen kívül hagyja az összes vezető szóköz karaktert, amíg az elsődleges nem fehér szóköz karakter megtalálható.
Ezután, ebből a karakterből kiindulva, a lehető legtöbb karakterre van szükség, amely érvényes lebegőpontos ábrázolást alkot, és lebegőpontos értékgé alakítja őket. Bármi, ami az utolsó érvényes karakter után maradt a karakterláncból, a végével jelölt objektumban tárolódik.
5. példa: strtod () függvény vezető szóközzel
#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; )
A program futtatásakor a kimenet a következő lesz:
25,5-től Dupla = 25,5-ig Végső karakterlánc = abc11,20-ig Dupla = 0 Végső karakterlánc = abc11,20