2009-02-08 95 views
10

我正在使用下面的一段Objective-C代码来格式化一个NSNumber,并且它在大多数时间都能正常工作,但是当NSNumber对象持有一个整数(没有小数部分)时,它并不完全符合我的要求, 。如何在格式化NSNumber对象时指定小数位?

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(80.0f, 90.0f, 225.0f, 40.0f)]; 
label.backgroundColor = [UIColor clearColor]; 
label.textColor = [UIColor whiteColor]; 
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setFormat:@"###.##"]; 
int bytes = 1024 * 1024; 
NSNumber *total = [NSNumber numberWithFloat:([self.totalFileSize floatValue]/bytes)]; 
label.text = [NSString stringWithFormat:@"0.00 MB of %@ MB", [formatter stringFromNumber:total]]; 

因此,举例来说,如果self.totalFileSize持有55.2300,就会显示 “55.23”,因为它应该在我的UILabel。但是,如果同一个变量保持55,它将只在标签上显示“55”。

我真正想要的是这个代码总是在输出中包含2个小数位。

我该如何做到这一点?

回答

7

我相信你所寻找的是:“%.2f”

最坏的情况下,可以拆分值,检查是否有小数点后什么。如果没有手动添加00?

+1

我相信你的意思你相信他正在寻找的是:“%.2f”;) – schnaader 2009-02-08 00:35:56

+0

使用它不会做你认为的事情,因为将NSNumber对象传递给NSLog将导致它调用[obj description],它将返回一个字符串。无论如何,我试图避免像“如果不在那里附加00”这样的黑客行为。我确信NSNumberFormatter有一个功能可以在这里完成我想要的功能。 – jpm 2009-02-08 01:01:18

+0

@Garret,我非常想找到这个简单的解决方案。数字格式化并不容易。谢谢。 – JFS 2013-05-29 18:58:36

3

你可能会与localizedStringWithFormat更好,是这样的...

[UILabel alloc] initWithFrame:CGRectMake(80.0f, 90.0f, 225.0f, 40.0f)]; 
label.backgroundColor = [UIColor clearColor]; 
label.textColor = [UIColor whiteColor]; 
int bytes = 1024 * 1024; 
label.text = [NSString localizedStringWithFormat:@"0.00 MB of %.2f MB", ([self.totalFileSize floatValue]/bytes)]; 

和当然,字节可能是const的无符号和clearColor往往是一个性能猪,但这些是另一个线程的问题。