2013-07-11 2 views
0

그래서 사용자 지정 슬라이더에서 작업하고 있는데이 작업을 수행하는 데 아주 가깝지만이 작업을 가장 가까운 5로 반올림하는 방법을 알아낼 수 없습니다. 이거?가장 가까운 5에 반올림

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

미리 감사드립니다.

+0

가장 가까운 5를 의미합니까? 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, float를 int로 밀어 넣으면 일관되고 적절한 결과를 얻을 수 있다고해서 좋은 알고리즘을 만들 수는 없습니다. – CodaFi

+0

감사합니다. Anoop! 슬라이더를 더 조심스럽게 살펴본 후 사용자가 슬라이더 위로 손가락을 대어 그것을 변경하면 크기가 5, 10 및 15로 증가했습니다. 문제는 그것이 작은 화면이었고 정확 해. 나는 증분을 25로 바꿨고 사용자가 슬라이더 위로 손가락을 움직일 때 아이폰에서 목표를 맞추기가 훨씬 쉬워졌습니다. –

0

오래된 질문에 지금은 통과에 걸쳐 와서 CodaFi의 발언은 사실 울렸다. 다른 통과자의 경우 다음을 고려하십시오.

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

부동 소수점 필요 없음.

관련 문제