Comment faire pour arrondir des nombres à virgule flottante à l'entier le plus proche en C?

Est-il un moyen pour arrondir des nombres à C?

Je ne veux pas utiliser plafond et le plancher. Est-il une autre alternative?

Je suis tombé sur cet extrait de code lorsque j'ai Googlé pour la réponse:

(int)(num < 0 ? (num - 0.5) : (num + 0.5))

La ligne ci-dessus permet d'imprimer la valeur 4, même lorsque le flotteur num =4.9.

  • Il ya beaucoup de différents types de l'arrondissement dont l'une(s) voulez-vous utiliser? S'il vous plaît poster des exemples de comportement souhaité.
  • Je pense que le problème est ailleurs, il conviendrait sans doute d'impression 5 pour l'entrée de 4.9.
  • Oui, la conversion d'un type à virgule flottante d'un type entier, qui peut représenter un nombre nécessaires de ce paramètre et de l'ampleur devrait fonctionner simplement en tronquant les décimales, ce code ne l' ±0,5 à cause de cette troncature à tour la valeur d'origine à l'écart à partir de zéro.
  • Besoins homework tag ?
  • Quel est le problème avec ceil et floor? Aussi, voir stackoverflow.com/questions/485525/round-for-float-in-c.
  • voir stackoverflow.com/questions/2205211/... sauf pour remplacer static_cast<int> avec (int)
  • La ligne ci-dessus n'a pas d'imprimer quoi que ce soit. Il n'y a rien dans cette ligne que peut faire aucune impression. Montrez-nous comment vous imprimer des choses. Le problème est sans doute là.
  • Sous-ensemble: spécifique pour la division entière: stackoverflow.com/questions/2422712/... | C++ stackoverflow.com/questions/485525/round-for-float-in-c

InformationsquelleAutor webgenius | 2010-04-03