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

Est-il un moyen de convertir un float pour un Int par arrondi au plus proche nombre entier?

23
demandé sur Vadim 2010-01-10 06:15:37

4 réponses

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ématiques.H travail pour les nombres négatifs aussi.

26
répondu ergosys 2010-01-10 04:15:55

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

Le documentation...

Https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man3/roundf.3.html

Https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man3/ceil.3.html

Https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man3/floor.3.html

57
répondu Oliver Pearmain 2017-07-02 02:58:03

Que diriez-vous de ceci:

float f = 1.51;
int i = (int) (f + 0.5);
3
répondu Paul Beckingham 2010-01-10 03:31:38
(int)floor(f+0.5);

Essayez ceci...

0
répondu marichyasana 2012-04-09 06:22:52