C ++ wcstod () - Libreria standard C ++

La funzione wcstod () in C ++ interpreta il contenuto di una stringa ampia come un numero in virgola mobile e restituisce il suo valore come double.

La funzione wcstod () imposta anche un puntatore in modo che punti al primo carattere wide dopo l'ultimo carattere valido della stringa wide, se presente, altrimenti il ​​puntatore viene impostato su null.

È definito nel file di intestazione.

prototipo di wcstod ()

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

La funzione wcstod () accetta una stringa larga e un puntatore a un carattere largo come parametro, interpreta il contenuto della stringa larga come un numero in virgola mobile e restituisce un valore doppio.

Parametri wcstod ()

  • str: una stringa ampia con la rappresentazione di un numero in virgola mobile.
  • str_end: puntatore a un puntatore a un carattere largo. Il valore di str_end è impostato dalla funzione sul carattere successivo in str dopo l'ultimo carattere valido. Questo parametro può anche essere un puntatore nullo.

wcstod () Restituisce il valore

La funzione wcstod () restituisce:

  • un valore doppio (che viene convertito dalla stringa wide).
  • 0.0 se non è stato possibile eseguire una conversione valida.

Se il valore convertito non rientra nell'intervallo, si verifica un errore di intervallo e viene restituito un valore HUGE_VAL positivo o negativo .

Esempio 1: come funziona la funzione 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; )

Quando esegui il programma, l'output sarà:

 Stringa larga = 83.201xzҖ ڇ Valore doppio = 83.201 Stringa finale = xzҖ ڇ

Esempio 2: funzione wcstod () senza caratteri finali

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

Quando esegui il programma, l'output sarà:

 Stringa larga = 83.201 Valore doppio = 83.201 Stringa finale =

Un valore a virgola mobile valido per la funzione wcstod () è costituito da un segno + o - opzionale seguito da uno dei seguenti insiemi:

  • Per il valore a virgola mobile decimale :
    • Un gruppo di cifre decimali (0-9), contenente facoltativamente un punto decimale (.). Ad esempio: 13.170, -5.63, ecc.
    • Una parte esponente facoltativa (e o E) seguita da un segno + o - facoltativo e da una sequenza non vuota di cifre decimali. Ad esempio: 3.46101e + 007, 13.19e-013, ecc.
  • Per il valore in virgola mobile esadecimale :
    • Una stringa che inizia con 0x o 0X, seguita da una sequenza non vuota di cifre esadecimali, contenente facoltativamente un punto decimale (.). Ad esempio: 0xfa5, -0xb1f.24, ecc.
    • Una parte esponente facoltativa (p o P) seguita da un segno + o - facoltativo e una sequenza non vuota di cifre esadecimali. Ad esempio: 0x51c.23p5, -0x2a.3p-3, ecc.
  • Infinito :
    • INF o INFINITY (ignorando maiuscole e minuscole). Ad esempio: -Inf, InfiNiTy, ecc.
  • NaN (non un numero) :
    • Sequenza NAN o NAN (ignorando maiuscole e minuscole) dove sequenza è una sequenza di caratteri composta solo da caratteri alfanumerici o dal trattino basso (_). Il risultato è un NaN silenzioso. Ad esempio: Nan, NaNab1, ecc.

Esempio 3: come funziona wcstod () con esponenti ed esadecimali?

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

Quando esegui il programma, l'output sarà:

 Stringa larga = -136.31e-2 Fine Valore doppio = -1.3631 Stringa finale = Fineψ Stringa larga = 0x11a.2c ת Doppio valore = 282.172 Stringa finale = ת

Esempio 4: casi wcstod per INFINITY e 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; )

Quando esegui il programma, l'output sarà:

 Stringa larga = -inFinityxΣy Valore doppio = -inf Stringa finale = xΣy Stringa larga = NaN11Щ Valore doppio = nan Stringa finale = 11Щ

In generale, un argomento in virgola mobile valido per la funzione wcstod () ha la seguente forma:

 (spazi) (- | +) (cifre) (.digits) ((e | E) (- | +) cifre)

La funzione wcstod () ignora tutti i caratteri di spazio vuoto iniziali finché non viene trovato il carattere principale diverso da spazi.

Quindi, a partire da questo carattere, prende il maggior numero di caratteri possibile che forma una valida rappresentazione in virgola mobile e li converte in un valore in virgola mobile. Tutto ciò che resta della stringa dopo l'ultimo carattere valido viene memorizzato nell'oggetto indicato da str_end.

Esempio 5: funzione wcstod () con spazi bianchi iniziali

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

Quando esegui il programma, l'output sarà:

 Stringa larga = 21,69Ӹaa Valore doppio = 21,69 Stringa finale = Ӹaa

Articoli interessanti...