c ++ arrondir des nombres à une distance de zéro
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?
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