Cómo imprimir números con puntos decimales especificados en C++

Jinku Hu 12 octubre 2023
Cómo imprimir números con puntos decimales especificados en C++

Este artículo introducirá cómo imprimir los números con puntos decimales especificados en C++.

Use los métodos std::fixed y std::setprecision para especificar la precisión

Este método utiliza los llamados manipuladores de E/S de la biblioteca estándar definida en el encabezado <iomanip> (ver lista completa). Estas funciones pueden modificar los datos del flujo y se utilizan principalmente para operaciones de formato de E/S. En el primer ejemplo, sólo usamos el método fixed, que modifica el formato por defecto de manera que los valores de punto flotante se escriben usando la notación de punto fijo. Nótese, sin embargo, que el resultado siempre tiene una precisión predefinida de 6 puntos.

C
++ cCopy#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::fixed;
using std::vector;

int main() {
  vector<double> d_vec = {123.231,   2.2343,       0.324,
                          10.222424, 6.3491092019, 110.12329403024,
                          92.001112, 0.000000124};

  for (auto &d : d_vec) {
    cout << fixed << d << endl;
  }
  return EXIT_SUCCESS;
}

Resultado:

 textCopy123.231000
2.234300
0.324000
10.222424
6.349109
110.123294
92.001112
0.000000

Alternativamente, podemos fijar los puntos decimales después de la coma y especificar el valor de precisión simultáneamente. En el siguiente ejemplo de código, la función fixed se llama junto con setprecision, que a su vez toma el valor int como parámetro.

C
++ cCopy#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::fixed;
using std::setprecision;
using std::vector;

int main() {
  vector<double> d_vec = {123.231,   2.2343,       0.324,
                          10.222424, 6.3491092019, 110.12329403024,
                          92.001112, 0.000000124};

  for (auto &d : d_vec) {
    cout << fixed << setprecision(3) << d << endl;
  }
  return EXIT_SUCCESS;
}

Resultado:

 textCopy123.231
2.234
0.324
10.222
6.349
110.123
92.001
0.000

El ejemplo de código anterior resuelve el problema inicial, pero la salida parece bastante mezclada, y apenas tiene formato legible. Podemos usar las funciones std::setw y std::setfill para mostrar los valores de flotante en un vector dado alineados a la misma posición de la coma. Para ello, debemos llamar a la función setw para decirle al cout la longitud máxima de cada salida (en este caso elegimos 8). A continuación, se llama a la función setfill para especificar un char que llenará los lugares de relleno. Finalmente, añadimos los métodos utilizados anteriormente (fixed y setprecision) y la salida a la consola.

C
++ cCopy#include <iomanip>
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::fixed;
using std::setfill;
using std::setprecision;
using std::setw;
using std::vector;

int main() {
  vector<double> d_vec = {123.231,   2.2343,       0.324,
                          10.222424, 6.3491092019, 110.12329403024,
                          92.001112, 0.000000124};

  for (auto &d : d_vec) {
    cout << setw(8) << setfill(' ') << fixed << setprecision(3) << d << endl;
  }
  return EXIT_SUCCESS;
}

Resultado:

 textCopy123.231
  2.234
  0.324
 10.222
  6.349
110.123
 92.001
  0.000
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Float