2009-02-08 59 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往往是一個性能豬,但這些是另一個線程的問題。