C++ Variables de tipo double y cout avanzado

Enviado por jvilella el Lun, 23/09/2019 - 03:52

Requisitos:

Vamos a ver como mostrar números con precisión.

En primer lugar, te introduzco un tipo de variable nuevo: double. Una variable de tipo "double" puede almacenar valores decimales. Por ejemplo:

double resultado;
resultado = 3.0 / 2;
cout << resultado << endl;

Mostrará por pantalla "1.5". Fíjate que en C++ usamos el punto como separador decimal en lugar de la coma.

Ahora bien, respecto a la manipulación del cout para mostrar los números con el formato que queramos, lo primero que debemos hacer es incluir al principio de nuestro código:

#include <iomanip>

Supongamos que queremos mostrar el número Pi usando un máximo número de dígitos. podemos hacerlo configurando "cout << setprecision(numero_de_digitos);". Ejemplos:

cout << setprecision(4);
cout << 3.141596 << endl; // Mostrara por pantalla 3.142
cout << 103.456 << endl; // Mostrara por pantalla 103.5

El último dígito se redondea (hacia arriba o hacia abajo en función de lo que esté más cerca).

Ahora supongamos que siempre queremos que el número muestre una cantidad concreta de decimales (por ejemplo para tener diversos números alineados uno debajo del otro). Configurando "cout << fixed", la orden"setprecision() pasa a referirse únicamente a las posiciones decimales (en lugar de al número de dígitos), incluso rellenará de ceros la parte decimal hasta llenar la cantidad de caracteres indicada. Por ejemplo:

cout << fixed;
cout << setprecision(4);
cout << 3.141596 << endl; // Mostrara por pantalla 3.1416
cout << setprecision(10);
cout << 3.141596 << endl; // Mostrara por pantalla 3.1415960000

Atención por que una vez se ha configurado fixed o setprecision() todos siguientes cout del código usarán ese formato.

Podemos referirnos en general a la anchura que ocupará una variable con setw(espacio_minimo_que_ocupa). Para hacerlo hay que indicar con qué carácter rellenar los espacios sobrantes mediante la instrucción setfill(letra_con_la_que_rellenar) (la letra debe ir entre comillas simples). Por ejemplo:

cout << setfill('*');
cout << setprecision(7);
cout << setw(1);
cout << 3.141596 << endl; // Mostrara por pantalla 3.141596

cout << setw(10);
cout << 3.141596 << endl; // Mostrara por pantalla **3.141596

Aquí el número que ponemos en setw() indicará el número mínimo de caracteres que ha de ocupar la variable, incluyendo el punto decimal. Los espacios que falten hasta llegar a este número se añadirán a la izquierda.

Atención por que una vez se ha configurado setw() todos siguientes cout del código usarán ese formato.

Y, por supuesto, podemos configurar el cout a la vez que definimos lo que mostrará (la configuración debe hacerse "antes", es decir, a la izquierda, de lo que se quiere mostrar), por ejemplo:

cout << fixed << setprecision(5) << setw(10) << setfill('*') << 3.14 << endl; // Mostrara por pantalla ***3.14000

Por supuesto cout quedará con esa configuración (fixed, setprecision(5), setw(10), setfill('*')) para futuros usos.

Con esto se pueden mostrar valores con un formato más agradable.

Printer Friendly, PDF & Email

Comentarios

Es la primera vez que me encuentro con una explicación tan fasil de entender, el articulo super excelente, sencilo y claro. Muchas gracias y felicitaciones.

Al principio de este artículo hay un error. Dice que 3 / 2 devolverá 1.5, pero no es así: al ser una división de dos enteros, el resultado será otro entero, a pesar de almacenarse en un double (es decir, devolverá 1). Lo correcto sería escribir 3.0 / 2, pues así la división es forzosamente con decimales.
Por lo demás, buen artículo.

Añadir nuevo comentario

Texto sin formato

  • No se permiten etiquetas HTML.
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de correos electrónicos y páginas web se convierten en enlaces automáticamente.