0

내 응용 프로그램에는 0:30 초 길이의 음악을 재생하는 음악 플레이어가 있습니다.소수점 앞에 숫자를 가져 오려면 float 값을 지정하십시오.

그러나 UILabel에서 현재 진행 상황을 표시하고 있으며 플로트이므로 라벨이 14.765로 표시됩니다. 당신이 말해 줄 수 있다면

나는 레이블이

0시 14분보다는 14.765 표시 얻을 수있는 방법을 부탁드립니다. 진행 과정에서 사초를 있었다면 내가 0시 4분를 표시 할 수있는 방법 당신이 말해 줄 수 있다면

또한, 나는 그것을 감사하겠습니다. 작업을해야

답변

3

이 제대로 작동 :

float time = 14.765; 

int mins = time/60; 
int secs = time-(mins*60); 

NSString * display = [NSString stringWithFormat:@"%d:%02d",mins,secs]; 

결과 또한 '하나 라이너'에서

14.765 => 0:14 
30.000 => 0:30 
59.765 => 0:59 
105.999 => 1:45 

편집

:

float time = 14.765; 
NSString * display = [NSString stringWithFormat:@"%d:%02d",(int)time/60,(int)time%60]; 
+0

감사합니다. anne! 고맙습니다! –

1
//%60 remove the minutes and int removes the floatingpoints 
int seconds = (int)(14.765)%60; 
// calc minutes 
int minutes = (int)(14.765/60); 
// validate if seconds have 2 digits 
NSString time = [NSString stringWithFormat:@"%i:%02i",minutes,seconds]; 

합니다. 내가 승리에있어 테스트 할 수 없음 현재

+1

포맷 문자열에 제로 패딩을 사용하는 이유는 무엇입니까? "" "% i : % 02i"'? 그것은 if 문을 제거합니다. –

+0

% (나머지)는 부동 소수점 피연산자에 유효하지 않습니다. 먼저 정수로 변환해야합니다. – CRD

+0

@Black Frog : 그 옵션을 알지 못했지만 큰 감사드립니다! @CRD : 감사합니다. 맞습니다. – Seega

2

먼저 float을 원하는 값으로 반올림하여 정수로 변환해야합니다. 그런 다음 분, 초를 추출 % 운영 정수 부문, /, 그리고 나머지를 사용하고 문자열을 생성 할 수 있습니다 :

float elapsedTime = 14.765; 
int wholeSeconds = round(elapsedTime); // or ceil (round up) or floor (round down/truncate) 
NSString *time = [NSString stringWithFormat:@"%02d:%02d", wholeSeconds/60, wholeSeconds%60]; 

%02d은 2 자리 숫자의 형식 사양입니다, 제로 패딩, 정수 - 볼 전체 세부 사항은 문서의 printf을 참조하십시오.

관련 문제