it-swarm.com.ru

Как мне преобразовать число с плавающей точкой в ​​int в Objective C?

Полный вопрос новичка, но это сводит меня с ума! Я пытаюсь это:

myInt = [myFloat integerValue]; 

но я получаю сообщение о том, что по сути integerValue не работает с плавающей точкой. 

Как мне это сделать?

50
Nick Locking

Я почти уверен, что синтаксис приведения в стиле C работает в Objective C, поэтому попробуйте тоже:

int myInt = (int) myFloat;

По крайней мере, это может заставить замолчать предупреждение компилятора.

124
unwind

что случилось с:

int myInt = myFloat;

имейте в виду, что это будет использовать правило округления по умолчанию, которое приближается к нулю (т.е. -3.9f становится -3) 

11
Alnitak
int myInt = (int) myFloat;

Работал нормально для меня. 

int myInt = [[NSNumber numberWithFloat:myFloat] intValue];

Ну, это один из вариантов. Если вам нравится объезд, я мог бы подумать о некоторых, использующих NSString. Почему легко, когда есть сложная альтернатива? :) 

8
Hermann Klecker

Вы также можете использовать C's lroundf(myFloat).


Невероятно полезный совет: в редакторе Xcode введите свой код, как сказать

myInt = roundf(someFloat);

затем управляйте/щелкните правой кнопкой мыши по roundf и перейдите к определению (или просто щелкните по команде).

После этого вы четко увидите очень длинный список доступных функций для вас. (Невозможно запомнить их все, так что просто используйте этот трюк.)

Например, в данном примере вполне вероятно, что lrintf - это то, что вам нужно.

Еще один совет: получить документацию по этим функциям. В вашем Terminal.app (или в любом Shell - ничего общего с Xcode, просто обычный Terminal.app ) просто введите man lrintf, и он даст вам полную информацию. Надеюсь, это поможет кому-то.

6
jmcharnes

В поддержку раскручивания помните, что Objective-C является надмножеством C, а не совершенно новым языком.

Все, что вы можете сделать в обычном старом ANSI C, можно сделать в Objective-C.

2
Matthew Schinckel

Вот более краткий подход, который был введен в 2012 году:

myInt = @(myFloat).intValue;
0
Ben Leggiero