Salut je veux arrondir doubles chiffres comme celui-ci (à l'écart de zéro) en C++:C++ arrondi des nombres loin de zéro
4.2 ----> 5
5.7 ----> 6
-7.8 ----> -8
-34.2 ----> -35
Quelle est la façon efficace de le faire?
Salut je veux arrondir doubles chiffres comme celui-ci (à l'écart de zéro) en C++:C++ arrondi des nombres loin de zéro
4.2 ----> 5
5.7 ----> 6
-7.8 ----> -8
-34.2 ----> -35
Quelle est la façon efficace de le faire?
inline double myround(double x)
{
return x < 0 ? floor(x) : ceil(x);
}
Comme mentionné dans the article Huppie cites, c'est le mieux exprimé comme un modèle qui fonctionne sur tous les types de flotteur
Voir http://en.cppreference.com/w/cpp/numeric/math/floor et http://en.cppreference.com/w/cpp/numeric/math/floor
ou, grâce à Pax , une version sans fonction:
x = (x < 0) ? floor(x) : ceil(x);
merci ça marche – Emre
Bon appel, @Ruben, a ajouté une variante de non-fonction et vous a donné un vote. J'espère que cela ne vous dérange pas (le montage, évidemment, cela ne vous dérange pas le vote). – paxdiablo
En attente de 3k moi-même - ajouté dans un spécificateur en ligne - j'aurais tendance à essayer de trouver un bon nom et de le coller dans une librairie utilitaire, probablement comme modèle pour tous les flotteurs - cela ne coûterait pas d'efficacité et vous permet isoler ou modifier toutes les utilisations –
essayer
double rounded = _copysign(ceil(abs(x)), x);
Il existe un article intéressant 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;
}
isnt il a appelé customFloor - il est ni: P –
Je vois dans l'article cité son impl'd comme template
article intéressant, +1 –
@Ruben Bartelink: devrait être mieux 'Round':) ... btw .. Vous avez des compétences de frappe ninja ;-) – Huppie
Du titre (original) « C++ Double arrondi ", je pensais que vous vouliez dire arrondir un nombre deux fois, juste pour être sûr :-) – paxdiablo
vous avez raison: D thx pour l'éditer – Emre