Cómo redondear un doble a un Int en C++

Jinku Hu 12 octubre 2023
  1. Usar la función round() para redondear de doble a entero
  2. Use la función lround() para convertir el doble al entero más cercano
  3. Utilice la función trunc() para el redondeo de doble a int
Cómo redondear un doble a un Int en C++

Este artículo explicará varios métodos de cómo redondear un doble a un entero en C++.

Usar la función round() para redondear de doble a entero

La función round() está definida en la cabecera <cmath>. Puede calcular el valor entero más cercano del argumento que el usuario pasa. Los casos intermedios se redondean a partir de cero, y el valor devuelto es del mismo tipo que el argumento. En el siguiente ejemplo, inicializamos un vector arbitrario de dobles y emitimos la función round() para cada elemento.

#include <cmath>
#include <iostream>
#include <vector>

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

int main() {
  vector<double> dfloats{-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : dfloats) {
    cout << "round(" << item << ") = " << round(item) << endl;
  }

  return EXIT_SUCCESS;
}

Resultado:

round(-3.5) = -4
round(-21.1) = -21
round(-1.99) = -2
round(0.129) = 0
round(2.5) = 3
round(3.111) = 3

Use la función lround() para convertir el doble al entero más cercano

Alternativamente, podemos usar la función lround(), que se comporta casi idénticamente a la round() con una diferencia: devuelve el valor en un formato de entero long. Nótese que, para ambas funciones, el valor de retorno puede ser inesperado, causado por diferentes errores de redondeo, que son ubicuos. Los escenarios correspondientes deben ser manejados como se especifica en la documentación aquí.

#include <cmath>
#include <iostream>
#include <vector>

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

int main() {
  vector<double> dfloats{-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : dfloats) {
    cout << "round(" << item << ") = " << lround(item) << endl;
  }

  return EXIT_SUCCESS;
}

Utilice la función trunc() para el redondeo de doble a int

trunc() es otra función útil de la cabecera <cmath>, que calcula el entero más cercano no mayor que el número pasado como argumento. trunc() calcula el valor de retorno en el formato de punto flotante como round(). Observe que estas dos funciones no tienen ningún efecto en el modo de redondeo actual. Los casos de manejo de errores se describen en la página de manual.

#include <cmath>
#include <iostream>
#include <vector>

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

int main() {
  vector<double> dfloats{-3.5, -21.1, -1.99, 0.129, 2.5, 3.111};

  for (auto &item : dfloats) {
    cout << "round(" << item << ") = " << trunc(item) << endl;
  }

  return EXIT_SUCCESS;
}
round(-3.5) = -3
round(-21.1) = -21
round(-1.99) = -1
round(0.129) = 0
round(2.5) = 2
round(3.111) = 3
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++ Double