Redondear el número de coma flotante a 2 decimales en C++

Jinku Hu 12 octubre 2023
  1. Utilice los especificadores de formato de función printf para redondear el número de coma flotante a 2 decimales en C++
  2. Utilice los especificadores de formato de función fprintf para redondear el número de coma flotante a 2 decimales en C++
  3. Utilice std::setprecision y std::fixed para redondear el número de coma flotante a 2 decimales en C++
Redondear el número de coma flotante a 2 decimales en C++

Este artículo explicará varios métodos de cómo redondear números de punto flotante a 2 decimales en C++.

Utilice los especificadores de formato de función printf para redondear el número de coma flotante a 2 decimales en C++

Los números de coma flotante tienen una representación binaria especial, lo que implica que las máquinas no pueden representar exactamente los números reales. Por lo tanto, es común recurrir a funciones de redondeo cuando se opera con números de punto flotante y se realizan cálculos sobre ellos. En este caso, sin embargo, solo necesitamos generar una cierta porción de la parte fraccionaria de los números.

La primera solución es utilizar la función printf para enviar texto formateado al flujo stdout. Tenga en cuenta que el especificador de formato normal para los números flotantes - %f debe modificarse a %.2f. La última notación asegura que solo se impriman 2 decimales del número y, al mismo tiempo, realiza el redondeo de acuerdo con las reglas matemáticas comunes. Tenga en cuenta que se puede usar una notación similar con especificadores de formato de otros tipos de datos.

#include <iostream>
#include <vector>

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

int main() {
  vector<double> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : floats) {
    printf("%.2f; ", item);
  }

  return EXIT_SUCCESS;
}

Producción :

-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;

Utilice los especificadores de formato de función fprintf para redondear el número de coma flotante a 2 decimales en C++

fprintf es otra función que puede usarse para hacer el formato de salida como la llamada a printf y, además, puede escribir en cualquier objeto de flujo FILE* que se pueda pasar como primer argumento. En el siguiente ejemplo, demostramos la impresión en el flujo stderr, una versión sin búfer de stdout para informes de errores y registro.

#include <iostream>
#include <vector>

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

int main() {
  vector<double> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : floats) {
    fprintf(stderr, "%.2f; ", item);
  }

  return EXIT_SUCCESS;
}

Producción :

-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;

Utilice std::setprecision y std::fixed para redondear el número de coma flotante a 2 decimales en C++

Alternativamente, se puede utilizar la función std::setprecision de la biblioteca de manipuladores de E/S junto con std::fixed. Este último se utiliza para modificar el formato predeterminado para operaciones de entrada/salida de punto flotante. Si lo usamos junto con std::setprecision, el resultado es una precisión fija de los números reales, y la precisión se puede especificar con el argumento entero pasado al propio std::setprecision.

#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> floats{-3.512312, -21.1123, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : floats) {
    cout << setprecision(2) << fixed << item << "; ";
  }

  return EXIT_SUCCESS;
}

Producción :

-3.51; -21.11; -1.99; 0.13; 2.50; 3.11;
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