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.