Objective C显示像Sensible Soccer这样的金钱格式

时间:2010-05-11 13:19:55

标签: objective-c format currency

我想要像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过去相似的格式显示资金?

感谢。

1 个答案:

答案 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)];
}