2009-02-08 25 views
10

NSNumber'i biçimlendirmek için aşağıdaki Objective-C kod parçasını kullanıyorum ve çoğu zaman iyi çalışıyor ancak NSNumber nesnesi bir tamsayı tuttuğunda istediğim şeyi yapmıyor (kesirli bölüm yok) . self.totalFileSize 55.2300 dayanırsaNSNumber nesnelerini biçimlendirirken ondalık basamaklar nasıl belirlenir?

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]]; 

Yani örneğin, benim UILabel üzerinde olması gerektiği gibi "55.23" gösterecektir. Ama aynı değişken 55 tutarsa, etikette "55" ibaresini gösterir.

Gerçekten istediğim, bu kodun her zaman çıktıda 2 ondalık basamak içermesidir.

Bunu nasıl başarabilirim? , Sen ondalık sonra bir şey varsa kontrol değerini bölebilirsiniz

En kötü durum senaryosu ".2f%":

cevap

16

Biçim dizginiz her zaman varolan her ondalık basamak için "0" olmalıdır. "55.23" ve ".23" ve "55.23" için" 20"

[formatter setFormat:@"##0.00"]; 

ve "0.23" ve "0.20"

için

[formatter setFormat:@"###.00"]; 

bakınız Number Format String Syntax (Mac OS X Versions 10.0 to 10.3)

Ya da her ikisi de 2 ile ayarlanmış - setMinimumFractionDigits: ve - setMaximumFractionDigits: ile bir 10.4 biçimlendirici kullanabilirsiniz.

+5

setFormat: iOS için mevcut değil (simülatörde çalışabilir, ancak cihazda çalışmıyor olabilir). SetPositiveFormat: ve setNegativeFormat: –

+0

'u iOS üzerinde kullanmanız gerekir. 'SetMinimumFractionDigits:' ve/veya - 'setMaximumFractionDigits:' – Laszlo

7

Ben sizsiniz aradığınızı inanıyoruz. 00 tane elle eklenmezse?

+1

Ne demek istediğime inanıyorum Ne aradığına inanıyorsunuz: "% .2f";) – schnaader

+0

Bu bir NSNumber nesnesinin NSLog nesnesine geçirilmesi, bir dizge döndüren [obj description] öğesini çağırmasıyla sonuçlanacağını düşündüğünüz şeyi yapmayacaktır. . Her halükarda, "orada değilse 00 ekleyiniz" gibi korsanlıklardan kaçınmaya çalışıyorum. Eminim NSNumberFormatter'ın burada istediğimi yapmak için bir özelliği var. – jpm

+0

@Garret, Bu basit çözümü bulmak için çaresizdim. Numara formatlaması kolay değil. Teşekkürler. – JFS

3

Çok gibi localizedStringWithFormat ile daha iyi olabilir ...

[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)]; 

Ve tabii

, bayt bir const imzasız olabilir ve clearColor bir performans domuz olma eğilimindedir, ancak bu Başka bir iş parçacığı için sorun var.

+0

ClearColor'un kullanımıyla ilgili sorun nedir ve daha iyi ne olabilir? Size çok teşekkür ederim! – JFS

+0

"localizedStringWithFormat" ipucu için teşekkürler. Çaresizce yerelleştirilmiş ondalık ayırıcıyı sağlamak için kolay bir yol arıyordum. – JFS

İlgili konular