Подтвердить что ты не робот

Как преобразовать float в int в Objective C?

Общий вопрос новичков, но это сводит меня с ума! Я пробую это:

myInt = [myFloat integerValue]; 

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

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

4b9b3361

Ответ 1

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

int myInt = (int) myFloat;

Он может отключить предупреждение компилятора, по крайней мере.

Ответ 2

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

int myInt = myFloat;

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

Ответ 3

int myInt = (int) myFloat;

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

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

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

Ответ 4

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


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

myInt = roundf(someFloat);

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

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

Например, в примере, вероятно, что lrintf - это то, что вы хотите.

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

Ответ 5

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

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

Ответ 6

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

myInt = @(myFloat).intValue;