我想要像SWOS(或Sensible World of Soccer)那样展示资金。
IE:而不是:$ 10,000,000 +你得到了 1000万美元,10.5米等。
而不是: $ 1,000,000你有100万美元
而不是: 1,500,000美元你得到150万美元
它也 适用于大型和小型 数字,说; 1k,1.25k,0.75k,0.25k, 等
我想知道,有没有办法以与SWOS过去相似的格式显示资金?
感谢。
答案 0 :(得分:2)
您可以通过编写NSFormatter或NSValueTransformer的子类来执行此操作,具体取决于您的需要。如果要将这些值与绑定一起使用,则应使用NSValueTransformer。如果值是用户可编辑的并且需要执行验证,请使用NSFormatter。
以下是NSFormatter内容的快速示例:
- (NSString *) stringForObjectValue:(id)anObject
{
if(!anObject || ![anObject respondsToSelector:@selector(doubleValue)])
return nil;
NSTimeInterval interval = [anObject doubleValue];
double intervalInSeconds = fabs(interval);
double intervalInMinutes = round(intervalInSeconds / SECONDS_PER_MINUTE);
if(intervalInMinutes >= 0 && intervalInMinutes <= 1) {
if(!self.includeSeconds)
return (intervalInMinutes == 0 ? NSLocalizedString(@"less than a minute", @"") : NSLocalizedString(@"1 minute", @""));
if(intervalInSeconds >= 0 && intervalInSeconds <= 4)
return NSLocalizedString(@"less than 5 seconds", @"");
else if(intervalInSeconds >= 5 && intervalInSeconds <= 9)
return NSLocalizedString(@"less than 10 seconds", @"");
else if(intervalInSeconds >= 10 && intervalInSeconds <= 19)
return NSLocalizedString(@"less than 20 seconds", @"");
else if(intervalInSeconds >= 20 && intervalInSeconds <= 39)
return NSLocalizedString(@"half a minute", @"");
else if(intervalInSeconds >= 40 && intervalInSeconds <= 59)
return NSLocalizedString(@"less than a minute", @"");
else
return NSLocalizedString(@"1 minute", @"");
}
else if(intervalInMinutes >= 2 && intervalInMinutes <= 44)
return [NSString stringWithFormat:NSLocalizedString(@"%.0f minutes", @""), intervalInMinutes];
else if(intervalInMinutes >= 45 && intervalInMinutes <= 89)
return NSLocalizedString(@"about 1 hour", @"");
else if(intervalInMinutes >= 90 && intervalInMinutes <= 1439)
return [NSString stringWithFormat:NSLocalizedString(@"about %.0f hours", @""), round(intervalInMinutes / MINUTES_PER_HOUR)];
else if(intervalInMinutes >= 1440 && intervalInMinutes <= 2879)
return NSLocalizedString(@"1 day", @"");
else if(intervalInMinutes >= 2880 && intervalInMinutes <= 43199)
return [NSString stringWithFormat:NSLocalizedString(@"%.0f days", @""), round(intervalInMinutes / 1440.0)];
else if(intervalInMinutes >= 43200 && intervalInMinutes <= 86399)
return NSLocalizedString(@"about 1 month", @"");
else if(intervalInMinutes >= 86400 && intervalInMinutes <= 525599)
return [NSString stringWithFormat:NSLocalizedString(@"%.0f months", @""), round(intervalInMinutes / 43200.0)];
else if(intervalInMinutes >= 525600 && intervalInMinutes <= 1051199)
return NSLocalizedString(@"about 1 year", @"");
else
return [NSString stringWithFormat:NSLocalizedString(@"over %.0f years", @""), round(intervalInMinutes / 525600.0)];
}