Vous pouvez utiliser la méthode C++11 std::round()
.
Si vous êtes toujours coincé avec des normes plus anciennes, vous pouvez utiliser std::floor()
qui arrondit toujours au nombre inférieur, et std::ceil()
qui arrondit toujours au nombre le plus élevé.
Pour obtenir le comportement normal d'arrondi, vous devriez en effet utiliser floor(i + 0.5)
.
Cette méthode vous posera des problèmes avec les nombres négatifs, une solution de contournement pour ce problème est d'utiliser ceil() pour les nombres négatifs :
double round(double number)
{
return number < 0.0 ? ceil(number - 0.5) : floor(number + 0.5);
}
Une autre méthode, plus propre mais plus gourmande en ressources, consiste à utiliser un stringstream et les manipulateurs d'entrée/sortie :
#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;
}
N'utilisez la deuxième approche que si vous n'êtes pas à court de ressources et/ou si vous avez besoin de contrôler la précision.