Как округлить значение с плавающей точкой и преобразовать его в значение NSInteger в iPhone SDK? - PullRequest
11 голосов
/ 19 мая 2010

Мне нужно округлить значение с плавающей запятой и преобразовать его в значение NSInteger.

Например:

float f = 90.909088;

Я хочу, чтобы результат был 91. Как от этого избавиться?

Ответы [ 4 ]

19 голосов
/ 02 января 2014

Быстрый раунд и приведение будут работать как для отрицательных значений, так и для положительных:

NSInteger intValue = (NSInteger) roundf(f);
19 голосов
/ 19 мая 2010

Для вас может работать одна из следующих математических функций:

  • двойной потолок (двойной)
  • двойной пол (двухместный)
  • двойной номер рядом (двухместный)
  • двойной ринт (двойной)
  • двойной раунд (двойной)
  • long int lrint (double)
  • длинный int lround (double)
  • long long int llrint (double)
  • long long int llround (double)
  • двойной ствол (двойной)

Чтобы получить больше документации, откройте сеанс терминала и введите (например)

man lround

Я выбираю lround в качестве примера, потому что я думаю, что это именно то, что вам нужно.

4 голосов
/ 19 мая 2010

До

f = floor(f + 0.5)

перед целочисленным преобразованием.

1 голос
/ 19 мая 2010

Попробуйте:

float f = 90.909088;
NSNumber *myNumber = [NSNumber numberWithDouble:(f+0.5)];
NSInteger myInt = [myNumber intValue];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...