trunc round places float decimals c++ rounding

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.