如标题中所述,有没有办法将巨大的数字(如 1,000,000(1 百万)或 45,500,000(45,500 万))格式化为字符串以显示该数字名称的缩短版本。我只是想阻止所有建议手动进行。我知道如何做到这一点。我只是想知道使用 NSNumberFormatter 是否有更简单的方法。
干杯,
卢卡斯
如标题中所述,有没有办法将巨大的数字(如 1,000,000(1 百万)或 45,500,000(45,500 万))格式化为字符串以显示该数字名称的缩短版本。我只是想阻止所有建议手动进行。我知道如何做到这一点。我只是想知道使用 NSNumberFormatter 是否有更简单的方法。
干杯,
卢卡斯
我建议结合使用手动和使用 NSNumberFormatter。我的想法是继承 NSNumberFormatter。如果您要格式化的数字> 1,000,000,则可以将其除以,使用超级实现对结果进行格式化,并在末尾附加“mln”。只做你不能为你做的部分。
这是一个 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
不,我不认为有办法用 NSNumberFormatter 做到这一点。在这件事上你是靠自己的。