Existe-t-il un moyen de convertir un float
en Int
en arrondissant à l'entier entier le plus proche possible?
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.
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...
Que dis-tu de ça:
float f = 1,51; int i = (int) (f + 0,5);
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
(int)floor(f+0.5);
Essaye ça...