2011-05-05 30 views
3

就像標題中所述,是否有任何方法可以將1,000,000(1,500n)或45,500,000(45,5 mln)等巨大數字格式化爲字符串以顯示此數字名稱的縮寫版本。我只是想阻止所有的建議手動。我知道如何做到這一點。我只是想知道是否有更簡單的方法使用NSNumberFormatter。NSNumberFormatter將1,000,000顯示爲1mln等

乾杯,

盧卡斯

回答

6

我會建議手動和使用NSNumberFormatter的組合。我的想法是子類NSNumberFormatter。如果要格式化的數字大於1,000,000,則可以對其進行分割,使用超級實現格式化結果,並在末尾附加「mln」。只做你不能爲你做的部分。

1

不,我不認爲有一種方式與NSNumberFormatter做到這一點。你對此自行決定。

4

這裏是一個NSNumberFormatter子類,做它的草圖(對不起,格式稍微偏離):

@implementation LTNumberFormatter 

@synthesize abbreviationForThousands; 
@synthesize abbreviationForMillions; 
@synthesize abbreviationForBillions; 

-(NSString*)stringFromNumber:(NSNumber*)number 
{ 
if (! (abbreviationForThousands || abbreviationForMillions || abbreviationForBillions)) 
{ 
    return [super stringFromNumber:number]; 
} 

double d = [number doubleValue]; 
if (abbreviationForBillions && d > 1000000000) 
{ 
    return [NSString stringWithFormat:@"%@ %@", [super stringFromNumber:[NSNumber numberWithDouble:d/1000000000]], abbreviationForBillions]; 
} 
if (abbreviationForMillions && d > 1000000) 
{ 
    return [NSString stringWithFormat:@"%@ %@", [super stringFromNumber:[NSNumber numberWithDouble:d/1000000]], abbreviationForMillions]; 
} 
if (abbreviationForThousands && d > 1000) 
{ 
    return [NSString stringWithFormat:@"%@ %@", [super stringFromNumber:[NSNumber numberWithDouble:d/1000]], abbreviationForThousands]; 
} 
    return [super stringFromNumber:number]; 
} 

@end