C ++ strtod () - standardní knihovna C ++

Funkce strtod () v C ++ interpretuje obsah řetězce jako číslo s plovoucí desetinnou čárkou a vrátí jeho hodnotu jako dvojitý.

Tato funkce také nastaví ukazatel tak, aby ukazoval na první znak za posledním platným znakem řetězce, pokud existuje, jinak je ukazatel nastaven na null.

Pro základnu 10 a řetězec „12abc“

Platná číselná část -> 12

První znak za platnou číselnou částí -> a

Je definován v hlavičkovém souboru.

strtod () prototyp

 double strtod (const char * str, char ** end);

Funkce strtod () vezme řetězec a ukazatel na znak jako svůj parametr, interpretuje obsah řetězce jako floatčíslo a vrátí doublehodnotu.

strtod () Parametry

  • str : Řetězec mající reprezentaci čísla s plovoucí desetinnou čárkou.
  • konec : Odkaz na již přidělený objekt typu char *. Hodnota end je nastavena funkcí na další znak v str za posledním platným znakem. Tento parametr může být také nulový ukazatel, v takovém případě se nepoužívá.

strtod () Návratová hodnota

Funkce strtod () vrací:

  • dvojitá hodnota (která je převedena z řetězce).
  • 0,0, pokud nelze provést platný převod.

Pokud je převedená hodnota mimo rozsah, dojde k chybě rozsahu a bude vrácena kladná nebo záporná hodnota HUGE_VAL.

Příklad 1: Jak funguje funkce strtod ()?

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

Když spustíte program, výstup bude:

 Číslo v koncovém řetězci = 12,44b 0xy Číslo v dvojnásobku = 12,44 řetězec = b 0xy

Příklad 2: funkce strtod () bez koncových znaků

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

Když spustíte program, výstup bude:

 Number in End String = 12.44b 0xy Number in Double = 12.44 Nulový ukazatel

Platná hodnota s plovoucí desetinnou čárkou pro funkci strtod () se skládá z volitelného znaménka + nebo - následovaného jednou z následujících sad:

  • Pro desetinnou hodnotu s plovoucí desetinnou čárkou :

    • Skupina desetinných míst (0-9), volitelně obsahující desetinnou čárku (.).
      Například: 13.170, -5.63 atd.

    • Volitelná exponentová část (e nebo E) následovaná volitelným znaménkem + nebo - a neprázdnou posloupností desetinných míst.
      Například: 3.46101e + 007, 13.19e-013 atd.

  • Pro hexadecimální hodnotu s plovoucí desetinnou čárkou :

    • Řetězec začínající 0x nebo 0X, následovaný neprázdnou posloupností šestnáctkových číslic, volitelně obsahující desetinnou čárku (.).
      Například: 0xfa5, -0xb1f.24 atd.

    • Volitelná exponentová část (p nebo P) následovaná volitelným znaménkem + nebo - a neprázdnou posloupností hexadecimálních číslic.
      Například: 0x51c.23p5, -0x2a.3p-3 atd.

  • Nekonečno :

    • INF nebo INFINITY (ignorování malých a velkých písmen).
      Například: -Inf, InfiNiTy atd.

  • NaN (není číslo) :

    • NAN nebo NANsequence (ignorování malých a velkých písmen), kde posloupnost je posloupnost znaků skládající se pouze z alfanumerických znaků nebo podtržítka (_). Výsledkem je tichý NaN.
      Například: Nan, NaNab1 atd.

Příklad 3: Jak strtod () pracuje s exponenty a hexadecimálními čísly?

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

Když spustíte program, výstup bude:

 Number in String = -44.01e-3End String Number in Double = -0.04401 End String = End String Number in String = 0xf1bc.51hello Number in Double = 61884.3 End String = hello

Example 4: strtod Cases for INFINITY and 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; ) 

When you run the program, the output will be:

 INFINITY to Double = inf End String = Infabc to Double = inf End String = abc NaN12a to Double = nan End String = 12a

In general, a valid floating point argument for strtod() function has the following form:

(whitespace) (- | +) (digits) (.digits) ( (e | E )(- | +)digits)

The strtod() function ignores all the leading whitespace characters until the primary non-whitespace character is found.

Poté, počínaje tímto znakem, trvá co nejvíce znaků, které tvoří platnou reprezentaci s plovoucí desetinnou čárkou a převádí je na hodnotu s plovoucí desetinnou čárkou. Cokoli, co zbylo z řetězce po posledním platném znaku, je uloženo v objektu, na který ukazuje konec.

Příklad 5: funkce strtod () s úvodními mezerami

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

Když spustíte program, výstup bude:

 25,5 až dvojnásobek = 25,5 koncový řetězec = abc11,20 až dvojnásobek = 0 koncový řetězec = abc11,20

Zajímavé články...