2013-07-11 4 views
0

Итак, я работаю над пользовательским слайдером, и я достаточно близко к нему, но не могу понять, как его округлить до ближайшего 5. Может ли кто-нибудь помочь мне сортировать это?Округление до ближайших пяти

int distance = progress; 
roundedValue = roundf(distance/5.0f) * 5.0f; 
int distanceInt = (int) roundedValue; 
return [NSString stringWithFormat:@"%i", distanceInt]; 

Заранее благодарен!

+0

ближайшая пятерка означает? 84 -> 85 88 -> 90 92 -> 90 96 -> 95 ???? –

+0

Правильно это то, что я пытаюсь сделать. У вас было что-то в виду? –

ответ

1

Я пробовал этот путь, не более, чем вы, и он дает мне то, что вы хотите.

-(NSString *)test:(NSInteger)progress{ 
    NSInteger distance = progress; 
    float roundedValue = roundf(distance/5.0f) * 5.0f; 
    int distanceInt = (int) roundedValue; 
    return [NSString stringWithFormat:@"%i", distanceInt]; 

} 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{ 

    for (NSInteger i=0; i<100; i+=4) { 
     NSLog(@"%ld -> %@",i, [self test:i]); 
    } 

} 

Выход:

0 -> 0 
4 -> 5 
8 -> 10 
12 -> 10 
16 -> 15 
20 -> 20 
24 -> 25 
28 -> 30 
32 -> 30 
36 -> 35 
40 -> 40 
44 -> 45 
48 -> 50 
etc 
+1

eww, ожидая, что поплавок, засунутый в int, даст вам последовательные и правильные результаты, не создаст хороший алгоритм. – CodaFi

+0

Спасибо Anoop! После более тщательного изучения слайдера масштаб был настолько прекрасным, что, когда пользователь скользил пальцем по ползунку, чтобы изменить его, он увеличивался на 5, 10 и иногда 15. Проблема в том, что это был такой маленький экран и трудно быть точным. Я изменил инкремент до 25, и теперь намного проще попасть в цель на iPhone, когда пользователь бежит пальцем по ползунку. –

0

Старый вопрос сейчас, наткнулся мимоходом и замечание CodaFi зазвонил верно. Для любых других прохожих, считайте:

int distanceInt = (distance/5) * 5; // largest multiple of 5 <= distance 
if ((distance - distanceInt) >= 3) 
    distanceInt += 1; // if remainder >= 3 round up 

Не требуется с плавающей точкой.

Смежные вопросы