格式化浮点值以获取小数点前的数字

时间:2011-04-14 20:02:34

标签: iphone objective-c xcode floating-point number-formatting

在我的应用程序中,我有一个音乐播放器,播放长度为0:30秒的音乐。

然而,在UILabel中我正在显示进度,因为它是一个浮点数,标签显示为14.765。

如果您能告诉我如何显示标签

,我将不胜感激

0:14而不是14.765。

另外,如果您能告诉我如果进度为4秒,我会如何显示0:04,我将不胜感激。

3 个答案:

答案 0 :(得分: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];  

答案 1 :(得分: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以获取完整详细信息。

答案 2 :(得分: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];

应该有用。无法测试我目前在Win上