hola quiero redondear los números dobles como este (lejos de cero) en C++:C++ redondeo de números lejos de cero
4.2 ----> 5
5.7 ----> 6
-7.8 ----> -8
-34.2 ----> -35
Cuál es la forma eficiente de hacer esto?
hola quiero redondear los números dobles como este (lejos de cero) en C++:C++ redondeo de números lejos de cero
4.2 ----> 5
5.7 ----> 6
-7.8 ----> -8
-34.2 ----> -35
Cuál es la forma eficiente de hacer esto?
inline double myround(double x)
{
return x < 0 ? floor(x) : ceil(x);
}
Como se mencionó en the article Huppie cites, esto se expresa mejor como una plantilla que trabaja en todos los tipos de flotador
Ver http://en.cppreference.com/w/cpp/numeric/math/floor y http://en.cppreference.com/w/cpp/numeric/math/floor
o, gracias a Pax , una versión sin función:
x = (x < 0) ? floor(x) : ceil(x);
gracias funciona – Emre
Buena llamada, @Ruben, agregó una variante sin función y le dio un voto. Espero que no te importe (la edición, es decir, obviamente no te importa el voto). – paxdiablo
Esperando 3k yo mismo - agregado en un especificador en línea - tendería a tratar de encontrar un buen nombre y pegarlo en una utilidad lib, probablemente como una plantilla para todas las carrozas - no costaría ninguna eficiencia y le permite rápidamente aislar o cambiar todos los usos del mismo –
Hay un buen artículo sobre un problema similar en CPlusPlus.com. La solución fácil a su problema debe ser algo como esto:
double customRound(double value) const {
return value < 0 ? floor(value) : ceil(value);
}
Una solución mejor es el que se menciona en el artículo, que utiliza una plantilla:
//--------------------------------------------------------------------------
// symmetric round up
// Bias: away from zero
template <typename FloatType>
FloatType ceil0(const FloatType& value)
{
FloatType result = std::ceil(std::fabs(value));
return (value < 0.0) ? -result : result;
}
Por qué isnt se llama customFloor - No es ni: P –
veo en el artículo citado su impl'd como template
Interesante artículo, 1 –
@Ruben Bartelink: 'Ronda' debe ser mejor:) ... por cierto .. .usted tiene algunas habilidades de mecanografía ninja ;-) – Huppie
Desde el (original) del título "C++ Doble redondeando ", pensé que quería decir redondear un número dos veces, solo para estar seguro :-) – paxdiablo
tiene razón: D thx para editarlo – Emre