3

如标题中所述,有没有办法将巨大的数字(如 1,000,000(1 百万)或 45,500,000(45,500 万))格式化为字符串以显示该数字名称的缩短版本。我只是想阻止所有建议手动进行。我知道如何做到这一点。我只是想知道使用 NSNumberFormatter 是否有更简单的方法。

干杯,

卢卡斯

4

3 回答 3

6

我建议结合使用手动和使用 NSNumberFormatter。我的想法是继承 NSNumberFormatter。如果您要格式化的数字> 1,000,000,则可以将其除以,使用超级实现对结果进行格式化,并在末尾附加“mln”。只做你不能为你做的部分。

于 2011-05-05T23:02:35.693 回答
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
于 2012-02-02T11:47:47.077 回答
1

不,我不认为有办法用 NSNumberFormatter 做到这一点。在这件事上你是靠自己的。

于 2011-05-05T21:03:00.970 回答