web-dev-qa-db-fra.com

Comment convertir un flottant en Int en arrondissant à l'entier entier le plus proche

Existe-t-il un moyen de convertir un float en Int en arrondissant à l'entier entier le plus proche possible?

24
Sam Jarman

En fait, la réponse de Paul Beckingham n'est pas tout à fait correcte. Si vous essayez un nombre négatif comme -1,51, vous obtenez -1 au lieu de -2.

Les fonctions round (), roundf (), lround () et lroundf () de math.h fonctionnent également pour les nombres négatifs.

27
ergosys

Pour arrondir au plus proche, utilisez roundf (), pour arrondir, utilisez ceilf (), pour arrondir, utilisez floorf (). Espérons que cet exemple démontre ...

#import "math.h"

...

float numberToRound;
int result;

numberToRound = 4.51;

result = (int)roundf(numberToRound);
NSLog(@"roundf(%f) = %d", numberToRound, result); // roundf(4.510000) = 5

result = (int)ceilf(numberToRound);
NSLog(@"ceilf(%f) = %d", numberToRound, result); // ceilf(4.510000) = 5

result = (int)floorf(numberToRound);
NSLog(@"floorf(%f) = %d", numberToRound, result); // floorf(4.510000) = 4


numberToRound = 10.49;

result = (int)roundf(numberToRound);
NSLog(@"roundf(%f) = %d", numberToRound, result); // roundf(10.490000) = 10

result = (int)ceilf(numberToRound);
NSLog(@"ceilf(%f) = %d", numberToRound, result); // ceilf(10.490000) = 11

result = (int)floorf(numberToRound);
NSLog(@"floorf(%f) = %d", numberToRound, result); // floorf(10.490000) = 10


numberToRound = -2.49;

result = (int)roundf(numberToRound);
NSLog(@"roundf(%f) = %d", numberToRound, result); // roundf(-2.490000) = -2

result = (int)ceilf(numberToRound);
NSLog(@"ceilf(%f) = %d", numberToRound, result); // ceilf(-2.490000) = -2

result = (int)floorf(numberToRound);
NSLog(@"floorf(%f) = %d", numberToRound, result); // floorf(-2.490000) = -3

numberToRound = -3.51;

result = (int)roundf(numberToRound);
NSLog(@"roundf(%f) = %d", numberToRound, result); // roundf(-3.510000) = -4

result = (int)ceilf(numberToRound);
NSLog(@"ceilf(%f) = %d", numberToRound, result); // ceilf(-3.510000) = -3

result = (int)floorf(numberToRound);
NSLog(@"floorf(%f) = %d", numberToRound, result); // floorf(-3.510000) = -4

La documentation...

https://developer.Apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/roundf.3.html

https://developer.Apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/ceil.3.html

https://developer.Apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/floor.3.html

57
Oliver Pearmain

Que dis-tu de ça:

 float f = 1,51; 
 int i = (int) (f + 0,5); 
4
Paul Beckingham

round () peut arrondir un float au plus proche int, mais sa sortie est toujours un float ... donc transformez la sortie de round () en un entier :

float input = 3.456;
int result;

result = (int)round(input);

// le résultat est: 3

Exemple de travail pour C++ ici.

0
Vince K
(int)floor(f+0.5);

Essaye ça...

0
marichyasana