214 votes

C++ : Arrondi au multiple plus proche d’un certain nombre

OK - je suis presque gêné de poster ici (et je vais supprimer si quelqu'un vote pour fermer), il semble comme une question de base.

Est-ce la bonne manière de rond, jusqu'à un multiple d'un nombre en C++?

Je sais qu'il y a d'autres questions liées à cela, mais je suis specficially intéressé de savoir quelle est la meilleure façon de le faire en C++:

int roundUp(int numToRound, int multiple)
{
 if(multiple == 0)
 {
  return numToRound;
 }

 int roundDown = ( (int) (numToRound) / multiple) * multiple;
 int roundUp = roundDown + multiple; 
 int roundCalc = roundUp;
 return (roundCalc);
}

Mise à jour: Désolé, je probablement ne les a pas intention claire. Voici quelques exemples:

roundUp(7, 100)
//return 100

roundUp(117, 100)
//return 200

roundUp(477, 100)
//return 500

roundUp(1077, 100)
//return 1100

roundUp(52, 20)
//return 60

roundUp(74, 30)
//return 90

EDIT: Merci pour toutes les réponses. Voici ce que j'ai:

int roundUp(int numToRound, int multiple)  
{  
 if(multiple == 0)  
 {  
  return numToRound;  
 }  

 int remainder = numToRound % multiple; 
 if (remainder == 0)
  {
    return numToRound; 
  }

 return numToRound + multiple - remainder; 
}  

195voto

Mark Ransom Points 132545

Cela fonctionne pour des nombres positifs, pas sûr que tout négatif. Il n’utilise que des mathématiques entier.

Edit : Voici une version qui fonctionne avec des nombres négatifs, si vous voulez dire, par « up », un résultat qui est toujours > = l’entrée.

178voto

KindDragon Points 1656

Sans conditions :

Si `` est une puissance de 2

Cela fonctionne pour les nombres négatifs comme arrondi s’éloignant de zéro

47voto

xlq Points 229

Cela fonctionne lorsque le facteur sera toujours positif :

26voto

plinth Points 26817

Il s’agit d’une généralisation du problème de « comment puis-je savoir combien d’octets k bits aura ? (A: (n bits + 7) / 8).

16voto

doron Points 10296
<pre><code></code><p>Et pas besoin de bricoler avec des conditions</p></pre>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X