HOWTO · C++
Cómo imprimir números con puntos decimales especificados en C++
Este artículo introduce cómo imprimir los números con puntos decimales especificados en C++
En esta página
Para imprimir un valor de punto flotante con un número determinado de dígitos después del separador decimal, escribe std::fixed seguido de std::setprecision(n) en std::cout. Por ejemplo, std::fixed << std::setprecision(2) muestra dos dígitos después del separador decimal. Incluye <iostream> para la salida y <iomanip> para los manipuladores. Los bloques de código y sus etiquetas visibles se conservan en inglés.
Usar std::fixed y std::setprecision
std::fixed selecciona la notación de punto fijo. Con ese formato activo, std::setprecision(n) establece el número de dígitos después del separador decimal; por eso, los valores se redondean al mostrarse y, cuando hace falta, se completan con ceros finales. Sin std::fixed, std::setprecision(n) controla el número de cifras significativas. Consulta la guía de setprecision para obtener más detalles.
Compila y ejecuta este programa completo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
#include <iomanip>
#include <iostream>
int main() {
const double values[] = {3.14159, 2.5, 0.004};
std::cout << std::fixed << std::setprecision(2);
for (double value : values) {
std::cout << value << '\n';
}
}
3.14
2.50
0.00
El primer valor se redondea al mostrarse, el segundo aparece con un dígito fraccionario final y el tercero se presenta con la misma precisión de dos decimales. El formato cambia la representación mostrada; no modifica los valores almacenados ni hace exacta la aritmética de punto flotante. Para mostrar tres dígitos después del separador decimal, usa std::setprecision(3).
El flujo conserva std::fixed y la precisión seleccionada para las siguientes inserciones de valores de punto flotante. Establece otra precisión si los valores posteriores necesitan mostrarse de manera distinta. Los manipuladores se declaran en <iomanip>. Las etiquetas visibles del ejemplo permanecen en inglés, igual que en el bloque original.
Alinear valores con std::setw y std::setfill
Para organizar datos en columnas, std::setw(width) establece un ancho mínimo de campo para el siguiente valor insertado. No trunca los valores que necesitan más espacio, y el ancho se restablece después de esa inserción. std::setfill(ch) selecciona el carácter de relleno y sigue activo hasta que lo cambies. De forma predeterminada, los números se alinean a la derecha.
Este ejemplo completo usa puntos como relleno y coloca cada número con formato en un campo de ocho caracteres. Las etiquetas visibles del bloque permanecen en inglés:
#include <iomanip>
#include <iostream>
int main() {
std::cout << std::fixed << std::setprecision(2) << std::setfill('.')
<< std::setw(8) << 12.5 << '\n'
<< std::setw(8) << 3.75 << '\n';
}
...12.50
....3.75
Vuelve a aplicar std::setw para cada valor que necesite un ancho de campo; cambiar el carácter de relleno no establece el ancho. Elige un ancho suficiente para el signo, los dígitos, el separador decimal y las cifras fraccionarias que esperas mostrar.
Dar formato con printf
Los programas de C++ también pueden usar printf desde <cstdio>. En su cadena de formato, %.2f muestra un valor de punto flotante con dos dígitos después del separador decimal; cambia 2 para elegir otra cantidad.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
#include <cstdio>
int main() {
const double value = 1.41421;
std::printf("Number with two decimal places: %.2f\n", value);
}
Number with two decimal places: 1.41
En printf, %f es el especificador de conversión de punto flotante para un argumento de tipo double. El especificador de formato debe coincidir con el tipo del argumento; una combinación incorrecta puede causar un comportamiento indefinido. Este ejemplo es un programa completo de C++ y no necesita las cabeceras de flujos. Las etiquetas visibles del ejemplo permanecen en inglés.
Elegir entre los flujos de C++ y printf
Usa std::cout con std::fixed y std::setprecision cuando quieras aplicar formato de flujo de C++ que se integre con otras inserciones y conserve el tipo de cada valor. Usa printf si trabajas con cadenas de formato de estilo printf existentes o si esa sintaxis te resulta más cómoda. Ambos métodos son válidos en C++.
Para mostrar un número fijo de decimales, recuerda combinar std::fixed con std::setprecision; el manipulador de precisión por sí solo tiene otro significado en el formato predeterminado del flujo. Usa std::setw y std::setfill para rellenar columnas, y vuelve a aplicar std::setw antes de cada valor, ya que su ancho solo se aplica una vez.