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

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

La fonction wcstold () définit également un pointeur pour qu'il pointe sur 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 wcstold ()

 long double wcstold (const wchar_t * str, wchar_t ** str_end);

La fonction wcstold () 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 longue.

Paramètres wcstold ()

  • 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.

wcstold () Valeur de retour

La fonction wcstold () renvoie:

  • une valeur double longue (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 wcstold ()?

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

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

 Chaîne large = 93,410η ת Double valeur longue = 93,41 Chaîne de fin = η ת

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

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

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

 Chaîne large = 93,410 Double valeur longue = 93,41 Chaîne de fin =

Une valeur à virgule flottante valide pour la fonction wcstold () 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 wcstold () 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"34.901u00c6u00f1"; wchar_t str2() = L"0Xfc1.a12u03c7r12"; wchar_t *end; long double value; value = wcstold(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstold(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

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

 Wide String = 34.901Æñ Long Double value = 34.901 End String = Æñ Wide String = 0Xfc1.a12χr12 Long Double value = 4033.63 End String = χr12

Exemple 4: cas wcstold 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"NaN22u0429"; wchar_t *end; long double value; value = wcstold(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstold(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

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

 Wide String = inFinityxΣy Long Double value = inf End String = xΣy Wide String = NaN22Щ Long Double value = nan End String = 22Щ

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

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

La fonction wcstold () ignore tous les caractères d'espacement 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 wcstold () 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" 59.013u0915u0975"; wchar_t *end; long double value; value = wcstold(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

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

 Chaîne large = 59,013 कॵ Double valeur longue = 59,013 Chaîne de fin = कॵ

Articles intéressants...