C ++ wcstod () - Bibliothèque standard C ++

La fonction wcstod () en C ++ interprète le contenu d'une chaîne large comme un nombre à virgule flottante et renvoie sa valeur comme un double.

La fonction wcstod () définit également un pointeur pour qu'il pointe vers le premier caractère large après le dernier caractère valide de la chaîne large s'il y en a, sinon le pointeur est défini sur null.

Il est défini dans le fichier d'en-tête.

prototype wcstod ()

 double wcstod (const wchar_t * str, wchar_t ** str_end);

La fonction wcstod () prend une chaîne large et un pointeur sur un caractère large comme paramètre, interprète le contenu de la chaîne large comme un nombre à virgule flottante et renvoie une valeur double.

Paramètres wcstod ()

  • str: Une chaîne large ayant la représentation d'un nombre à virgule flottante.
  • str_end: pointeur vers un pointeur vers un caractère large. La valeur de str_end est définie par la fonction sur le caractère suivant de str après le dernier caractère valide. Ce paramètre peut également être un pointeur nul.

wcstod () Valeur de retour

La fonction wcstod () renvoie:

  • une valeur double (qui est convertie à partir de la chaîne large).
  • 0.0 si aucune conversion valide n'a pu être effectuée.

Si la valeur convertie est hors de la plage, une erreur de plage se produit et un HUGE_VAL positif ou négatif est renvoyé.

Exemple 1: Comment fonctionne la fonction wcstod ()?

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L"83.201xzu0496u0687"; wchar_t *end; double value; value = wcstod(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Lorsque vous exécutez le programme, la sortie sera:

 Chaîne large = 83.201xzҖ ڇ Double valeur = 83.201 Chaîne de fin = xzҖ ڇ

Exemple 2: fonction wcstod () sans caractères de fin

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L"83.201"; wchar_t *end; double value; value = wcstod(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; ) 

Lorsque vous exécutez le programme, la sortie sera:

 Chaîne large = 83,201 Double valeur = 83,201 Chaîne de fin =

Une valeur à virgule flottante valide pour la fonction wcstod () se compose d'un signe + ou - optionnel suivi de l'un des ensembles suivants:

  • Pour une valeur décimale à virgule flottante :
    • Un groupe de chiffres décimaux (0-9), contenant éventuellement un point décimal (.). Par exemple: 13.170, -5.63, etc.
    • Une partie d'exposant facultative (e ou E) suivie d'un signe + ou - facultatif et d'une séquence non vide de chiffres décimaux. Par exemple: 3.46101e + 007, 13.19e-013, etc.
  • Pour une valeur à virgule flottante hexadécimale :
    • Une chaîne commençant par 0x ou 0X, suivie d'une séquence non vide de chiffres hexadécimaux, contenant éventuellement un point décimal (.). Par exemple: 0xfa5, -0xb1f.24, etc.
    • Une partie d'exposant facultative (p ou P) suivie d'un signe + ou - facultatif et d'une séquence non vide de chiffres hexadécimaux. Par exemple: 0x51c.23p5, -0x2a.3p-3, etc.
  • Infini :
    • INF ou INFINITY (sans tenir compte de la casse). Par exemple: -Inf, InfiNiTy, etc.
  • NaN (pas un nombre) :
    • Séquence NAN ou NAN (sans tenir compte de la casse) où la séquence est une séquence de caractères composée uniquement de caractères alphanumériques ou du trait de soulignement (_). Le résultat est un NaN silencieux. Par exemple: Nan, NaNab1, etc.

Exemple 3: Comment wcstod () fonctionne avec les exposants et les hexadécimaux?

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str1() = L"-136.31e-2Endu03c8"; wchar_t str2() = L"0x11a.2cu05ea"; wchar_t *end; double value; value = wcstod(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Double value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstod(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Lorsque vous exécutez le programme, la sortie sera:

 Wide String = -136.31e-2Endψ Double valeur = -1.3631 End String = Endψ Wide String = 0x11a.2c ת Double value = 282.172 End String = ת

Exemple 4: cas wcstod pour INFINITY et NaN

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str1() = L"-inFinityxu03a3y"; wchar_t str2() = L"NaN11u0429"; wchar_t *end; double value; value = wcstod(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Double value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstod(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Lorsque vous exécutez le programme, la sortie sera:

 Chaîne large = -inFinityxΣy Valeur double = -inf Chaîne de fin = xΣy Chaîne large = NaN11Щ Valeur double = nan Chaîne de fin = 11Щ

En général, un argument en virgule flottante valide pour la fonction wcstod () a la forme suivante:

 (espace) (- | +) (chiffres) (.digits) ((e | E) (- | +) chiffres)

La fonction wcstod () ignore tous les caractères blancs de tête jusqu'à ce que le caractère non-blanc principal soit trouvé.

Ensuite, à partir de ce caractère, il prend autant de caractères que possible pour former une représentation à virgule flottante valide et les convertit en une valeur à virgule flottante. Tout ce qui reste de la chaîne après le dernier caractère valide est stocké dans l'objet pointé par str_end.

Exemple 5: fonction wcstod () avec un espace blanc au début

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L" 21.69u04f8aa"; wchar_t *end; double value; value = wcstod(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Lorsque vous exécutez le programme, la sortie sera:

 Chaîne large = 21,69Ӹaa Valeur double = 21,69 Chaîne de fin = Ӹaa

Articles intéressants...