C ++ wcstod () - Biblioteca estándar de C ++

La función wcstod () en C ++ interpreta el contenido de una cadena ancha como un número de punto flotante y devuelve su valor como un doble.

La función wcstod () también establece un puntero para apuntar al primer carácter ancho después del último carácter válido de la cadena ancha si lo hay, de lo contrario, el puntero se establece en nulo.

Está definido en el archivo de encabezado.

prototipo de wcstod ()

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

La función wcstod () toma una cadena ancha y un puntero a un carácter ancho como parámetro, interpreta el contenido de la cadena ancha como un número de coma flotante y devuelve un valor doble.

Parámetros de wcstod ()

  • str: Una cadena ancha que tiene la representación de un número de punto flotante.
  • str_end: puntero a un puntero a un carácter ancho. El valor de str_end lo establece la función en el siguiente carácter de str después del último carácter válido. Este parámetro también puede ser un puntero nulo.

wcstod () Valor de retorno

La función wcstod () devuelve:

  • un valor doble (que se convierte de la cadena ancha).
  • 0.0 si no se pudo realizar una conversión válida.

Si el valor convertido está fuera del rango, se produce un error de rango y se devuelve un HUGE_VAL positivo o negativo .

Ejemplo 1: ¿Cómo funciona la función 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; )

Cuando ejecute el programa, la salida será:

 Cadena ancha = 83.201xzҖ ڇ Valor doble = 83.201 Cadena final = xzҖ ڇ

Ejemplo 2: función wcstod () sin caracteres finales

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

Cuando ejecute el programa, la salida será:

 Cadena ancha = 83.201 Valor doble = 83.201 Cadena final =

Un valor de punto flotante válido para la función wcstod () consta de un signo + o - opcional seguido de uno de los siguientes conjuntos:

  • Para el valor de coma flotante decimal :
    • Un grupo de dígitos decimales (0-9), que opcionalmente contiene un punto decimal (.). Por ejemplo: 13.170, -5.63, etc.
    • Una parte de exponente opcional (e o E) seguida de un signo + o - opcional y una secuencia no vacía de dígitos decimales. Por ejemplo: 3.46101e + 007, 13.19e-013, etc.
  • Para valor de coma flotante hexadecimal :
    • Una cadena que comienza con 0x o 0X, seguida de una secuencia no vacía de dígitos hexadecimales, que opcionalmente contiene un punto decimal (.). Por ejemplo: 0xfa5, -0xb1f.24, etc.
    • Una parte de exponente opcional (p o P) seguida de un signo + o - opcional y una secuencia no vacía de dígitos hexadecimales. Por ejemplo: 0x51c.23p5, -0x2a.3p-3, etc.
  • Infinito :
    • INF o INFINITY (ignorando el caso). Por ejemplo: -Inf, InfiNiTy, etc.
  • NaN (no es un número) :
    • Secuencia NAN o NAN (ignorando el caso) donde la secuencia es una secuencia de caracteres que consta solo de caracteres alfanuméricos o el guión bajo (_). El resultado es un NaN silencioso. Por ejemplo: Nan, NaNab1, etc.

Ejemplo 3: ¿Cómo funciona wcstod () con exponentes y hexadecimales?

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

Cuando ejecute el programa, la salida será:

 Cadena ancha = -136.31e-2Endψ Valor doble = -1.3631 Cadena final = Finψ Cadena ancha = 0x11a.2c ת Valor doble = 282.172 Cadena final = ת

Ejemplo 4: Casos wcstod para INFINITY y 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; )

Cuando ejecute el programa, la salida será:

 Cadena ancha = -inFinityxΣy Valor doble = -inf Cadena final = xΣy Cadena ancha = NaN11Щ Valor doble = nan Cadena final = 11Щ

En general, un argumento de punto flotante válido para la función wcstod () tiene la siguiente forma:

 (espacio en blanco) (- | +) (dígitos) (. dígitos) ((e | E) (- | +) dígitos)

La función wcstod () ignora todos los espacios en blanco iniciales hasta que se encuentra el carácter primario que no es un espacio en blanco.

Luego, a partir de este carácter, toma tantos caracteres como sea posible que forman una representación de punto flotante válida y los convierte en un valor de punto flotante. Lo que quede de la cadena después del último carácter válido se almacena en el objeto señalado por str_end.

Ejemplo 5: función wcstod () con espacios en blanco iniciales

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

Cuando ejecute el programa, la salida será:

 Cadena ancha = 21.69Ӹaa Valor doble = 21.69 Cadena final = Ӹaa

Articulos interesantes...