Plusieurs solutions :
Soit un cast vers l'entier le plus proche, si il est vraiment proche :
Code:
1 2 3 4 5 6 7 8 9 10 11
| double my_round(double value) {
static const double epsilon = 1e-16; // A definir comme tu preferes
const int rounded = static_cast<int>(value);
if (v - rounded > 0.5) ++rounded;
// rounded contient l'entier le plus proche. Il est aussi possible d'utiliser std::round de <cmath> pour faire ça, pour ce message je n'ai simplement pas pris le temps de vérifier le prototype exact.
double error = rounded - value;
if (-epsilon < error && error < epsilon) // Si on est proche de l'entier le plus proche
return rounded; // On arrondit vers lui
else // Sinon
return value; // On ne change rien
} |
Soit on fait du calcul formel, qui a l'avantage d'être infiniment précis (autant que le calcul à la main sans arrondi, quoi) -- mais là, bon courage !