135 votes

C++ : Comment arrondir un double à un entier ?

J'ai un double (appelez-le x), censé être 55 mais en réalité stocké sous le nom 54.99999999999999943157 que je viens de réaliser.

Alors quand je fais

 double x = 54.999999999999943157;
int y = (int) x;

y = 54 au lieu de 55 !

Cela m'a intrigué pendant longtemps. Comment l'arrondir correctement ?

62voto

MK. Points 11889

Le casting n'est pas une opération mathématique et ne se comporte pas comme tel. Essayer

 int y = (int)round(x);

9voto

Pubby Points 29386

La conversion à un int tronque la valeur. L'ajout de 0.5 permet d'arrondir correctement.

 int y = (int)(x + 0.5);

-8voto

zik Points 47
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    double x=54.999999999999943157;
    int y=ceil(x);//The ceil() function returns the smallest integer no less than x
    return 0;
}

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