Necesito una función sencilla de redondeo en coma flotante, así:
double round(double);
round(0.1) = 0
round(-0.1) = 0
round(-0.9) = -1
Puedo encontrar ceil()
y floor()
en el math.h - pero no round()
.
¿Está presente en la biblioteca estándar de C++ con otro nombre, o falta?
No hay round() en la biblioteca estándar de C++98. Sin embargo, puede escribir una usted mismo. La siguiente es una implementación de round-half-up:
double round(double d)
{
return floor(d + 0.5);
}
La razón probable por la que no hay una función de redondeo en la biblioteca estándar de C++98 es que, de hecho, se puede implementar de diferentes maneras. La anterior es una forma común, pero hay otras como round-to-even, que es menos tendenciosa y generalmente mejor si va a hacer muchos redondeos; aunque es un poco más compleja de implementar.
Suele implementarse como floor(value + 0.5)
.
Edición: y probablemente no se llama redondear, ya que hay al menos tres algoritmos de redondeo que conozco: redondear a cero, redondear al entero más cercano, y redondear al banquero. Lo que pides es redondear al entero más cercano.
Hice esto:
#include <cmath.h>
using namespace std;
double roundh(double number, int place){
/* place = decimal point. Putting in 0 will make it round to whole
number. putting in 1 will round to the
tenths digit.
*/
number *= 10^place;
int istack = (int)floor(number);
int out = number-istack;
if (out < 0.5){
floor(number);
number /= 10^place;
return number;
}
if (out > 0.4) {
ceil(number);
number /= 10^place;
return number;
}
}