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

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

Cette fonction 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 wcstof ()

 float wcstof (const wchar_t * str, wchar_t ** str_end);

La fonction wcstof () prend une chaîne large et un pointeur vers 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 flottante.

Paramètres wcstof ()

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

wcstof () Valeur de retour

La fonction wcstof () renvoie:

  • une valeur flottante (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 wcstof ()?

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L"40.001u220fc12"; wchar_t *end; float value; value = wcstof(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

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

 Chaîne large = 40,001∏c12 Valeur flottante = 40,001 Chaîne de fin = ∏c12

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

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

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

 Chaîne large = 791,513 Valeur flottante = 791,513 Chaîne de fin =

Une valeur à virgule flottante valide pour la fonction wcstof () 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 wcstof () fonctionne-t-il 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"39.119e+2xxu0a93"; wchar_t str2() = L"0Xf1.23cu00d8a1"; wchar_t *end; float value; value = wcstof(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstof(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

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

 Wide String = 39.119e + 2xx ઓ Float value = 3911.9 End String = xx ઓ Wide String = 0Xf1.23cØa1 Float value = 241.14 End String = Øa1

Exemple 4: wcstof cas 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; float value; value = wcstof(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstof(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

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

 Wide String = -inFinityxΣy Float value = -inf End String = xΣy Wide String = NaN11Щ Float value = nan End String = 11Щ

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

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

La fonction wcstof () 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 wcstof () 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; float value; value = wcstof(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Float 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 flottante = 21,69 Chaîne de fin = Ӹaa

Articles intéressants...