En los programas de cálculo numérico es usualmente necesario darle un determinado formato a los datos, sea bien por razones estéticas como para no perder información debido a un número insuficiente de dígitos o no imprimir información superflua causada por un número excesivo de cifras decimales.
C++ tiene una serie de funciones para este propósito. Para controlar
la anchura del campo está la funcion width de la clase
ostream. La inclusión de la línea
cout.width(25);
origina un campo se salida con una anchura de 25 caracteres. Igualmente
se puede controlar el número de dígitos con la función precision.
La sentencia
cout.precision(10);
me origina una salida con 10 dígitos. La función width sólo
actua en la salida inmediatamente posterior a la llamada de la función
mientras que precision() es válida hasta que se modifique con
una nueva llamada a precision().
Tambien se puede conseguir el fijar la anchura del campo y el número de dígitos mediante los llamados manipuladores setw y setprecision.
cout << setw(25) << setprecision(10) <<
r << setw(10) << setprecision(5) << d <<
endl;
produce la impresion de r en un campo de anchura 25 y con 10
digitos y de d en un campo de anchura 10 con 5 dígitos.
La función width() fija el mínimo número de caracteres. Si la cifra imprimida tiene más dígitos no decimales, se produce la salida de los caracteres necesarios prara no perder información.
Una forma adicional es mediante la función setf de la clase ios_base. Aunque su nombre standard es ios_base, muchos compiladores, entre ellos g++ y MVC++ reconocen esa clase como simplemente ios y es la notación que empleremos en lo que sigue. Hay tres tipos de formato: general, fixed y scientific. Con fixed y scientific la precision establece el número de cifras después del punto decimal. Con la general establece el número de espacios ocupados contando los dígitos y el punto decimal.
cout.setf(ios::fixed,ios::floatfield);
produce una salida con punto decimal mientras que
cout.setf(ios::scientific,ios::floatfield);
produce una salida en notación exponencial.
La sentencia
cout.setf(0,ios::floatfield);
restablece los valores por defecto(tipo general).
Los números se pueden ajustar a la derecha o izquierda del campo con
cout.setf(ios::left,ios::adjustfield); // ajuste a la izquierda.
cout.setf(ios::right,ios::adjustfield); // ajuste a la derecha.
cout.setf(ios::internal,ios::adjustfield); // Blancos entre signo y número.