2011-01-15 4 views
37

Как я мог бы округлить число с плавающей точкой до ближайшего целого числа в Objective-C:Objective-C Поплавок Завершают

Пример:

float f = 45.698f; 
int rounded = _______; 
NSLog(@"the rounded float is %i",rounded); 

должен печатать "закругленный поплавок 46"

ответ

26

рекомендуемым способом в этом ответе: https://stackoverflow.com/a/4702539/308315


Оригинальный ответ:

отбрасывает его в int после добавления 0,5.

Так

NSLog (@"the rounded float is %i", (int) (f + 0.5)); 

Edit: как вы просили:

int rounded = (f + 0.5); 


NSLog (@"the rounded float is %i", rounded); 
+7

Это будет производить только _downward_ округление. Чтобы получить <.5 раундов вниз и> = .5 раундов: [NSString stringWithFormat: @ "% i", (int) round (f)] – mpemburn

+12

на самом деле нет. Это приведет к ближайшему округлению. –

+13

Это неправильно обрабатывает отрицательные числа. – AndrewCr

144

Использование стандартной функции семьи C round(). roundf() за float, round() за double и roundl() за long double. Затем вы можете применить результат к целочисленному типу по вашему выбору.

+2

Я думаю, что это лучший и эффективный способ сделать это. –

+2

В отличие от метода + 0,5, это верно обрабатывает отрицательные числа. – SwiftArchitect

+0

Эй, @JonathanGrynspan, много ответов вокруг связаны с вашим ответом здесь - было бы здорово расширить его с помощью некоторых примеров того, как (и почему) использовать их. – brandonscript

0

давайте делать опробованы и контроль

//Your Number to Round (can be predefined or whatever you need it to be) 
float numberToRound = 1.12345; 
float min = ([ [[NSString alloc]initWithFormat:@"%.0f",numberToRound] floatValue]); 
float max = min + 1; 
float maxdif = max - numberToRound; 
if (maxdif > .5) { 
    numberToRound = min; 
}else{ 
    numberToRound = max; 
} 
//numberToRound will now equal it's closest whole number (in this case, it's 1) 
+0

Я думаю, что этот ответ гораздо полезнее, чем любой из вышеперечисленных вопросов, задаваемых вопросом. –

5

Самый простой способ вокруг поплавка в Objective-C является lroundf:

float yourFloat = 3.14; 
int roundedFloat = lroundf(yourFloat); 
NSLog(@"%d",roundedFloat); 
+0

Нет, проще всего добавить 0.5 и усечь. Вам не нужно помнить «lroundf», чтобы сделать это, и вы точно знаете, что получаете. –

+4

@Hot Licks - Если, конечно, вам не нужно округлять как положительные, так и отрицательные числа (мой случай), где метод 0,5 имеет недостатки. – capikaw

3

Если в случае вы хотите, чтобы значение round float в целочисленном ниже было простым методом округления значения поплавка в объекте C.

int roundedValue = roundf(Your float value); 
1

Для круглых float до ближайшего целого использования roundf()

roundf(3.2) // 3 
roundf(3.6) // 4 

Вы можете также использовать ceil() функцию всегда получают верхнее значение из float.

ceil(3.2) // 4 
ceil(3.6) // 4 

И самое низкое значение floor()

floorf(3.2) //3 
floorf(3.6) //3 
Смежные вопросы