places - round to 2 decimals c++
¿Dónde está Round() en C++? (4)
Duplicado de: redondo () para flotar en C ++
Estoy usando VS2008 y he incluido math.h pero todavía no puedo encontrar una función redonda. ¿Existe?
Veo un montón de soluciones "agregar 0.5 y convertir a int" en google. ¿Esa es la mejor práctica?
En realidad, no hay una función redonda en Microsoft math.h.
Sin embargo, podría usar el método estático Math :: Round () en su lugar.
(Dependiendo de su tipo de proyecto)
No sé si es la mejor práctica o no, pero usar la técnica 0.5 con un piso () parece ser el camino a seguir.
Usar floor(num + 0.5)
no funcionará para números negativos. En ese caso, necesita usar ceil(num - 0.5)
.
double roundToNearest(double num) {
return (num > 0.0) ? floor(num + 0.5) : ceil(num - 0.5);
}
Puede usar C ++ 11 std::round()
.
Si todavía está atascado con estándares más antiguos, puede usar std::floor()
, que siempre redondea al número más bajo, y std::ceil()
, que siempre redondea al número más alto.
Para obtener el comportamiento de redondeo normal, de hecho usaría floor(i + 0.5)
.
De esta manera le dará problemas con los números negativos, una solución para ese problema es mediante el uso de ceil () para los números negativos:
double round(double number)
{
return number < 0.0 ? ceil(number - 0.5) : floor(number + 0.5);
}
Otra forma, más limpia, pero más intensiva en recursos, es hacer uso de un stringstream y los manipuladores de entrada / salida:
#include <iostream>
#include <sstream>
double round(double val, int precision)
{
std::stringstream s;
s << std::setprecision(precision) << std::setiosflags(std::ios_base::fixed) << val;
s >> val;
return val;
}
Solo use el segundo enfoque si no tiene pocos recursos y / o necesita tener control sobre la precisión.