Question

Salut je veux arrondir doubles chiffres comme celui-ci (à l'écart de zéro) en C ++:

  4.2 ---->   5
  5.7 ---->   6
 -7.8 ---->  -8
-34.2 ----> -35

Quelle est la façon efficace de le faire?

Était-ce utile?

La solution

inline double myround(double x)
{
  return x < 0 ? floor(x) : ceil(x);
}

Comme mentionné dans l'article Huppie cite , c'est le mieux exprimé en modèle qui fonctionne sur tous les types de flotteur

Voir http://en.cppreference.com/w/cpp/ numérique / math / étage et http: //en.cppreference. com / w / cpp / numérique / math / étage

ou, grâce à Pax, une version non-fonctionnement:

x = (x < 0) ? floor(x) : ceil(x);

Autres conseils

Il y a un bel article sur un problème similaire sur CPlusPlus.com . La solution facile à votre problème devrait être quelque chose comme ceci:

double customRound( double value ) const {
   return value < 0 ? floor( value ) : ceil( value );
}

Une meilleure solution est celle mentionnée dans l'article, qui utilise un modèle:

//--------------------------------------------------------------------------
// 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;
}

essayer

 double rounded = _copysign(ceil(abs(x)), x);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top