【问题标题】:Objective C display money format like Sensible SoccerObjective C 显示货币格式,如 Sensible Soccer
【发布时间】:2010-05-11 13:19:55
【问题描述】:

我想像 SWOS(或 Sensible World of Soccer)那样展示金钱。

IE:而不是:$10,000,000+ 你得到了 1000 万美元、1050 万美元等。

而不是: 1,000,000 美元,你得到了 100 万美元

而不是: 1,500,000 美元你得到了 150 万美元

这也是 为大型和小型工作 数字,比如说; 1k, 1.25k, 0.75k, 0.25k, 等等

我想知道,有没有办法以类似于 SWOS 过去的方式来显示金钱?

谢谢。

【问题讨论】:

标签: objective-c format currency


【解决方案1】:

您可以通过编写 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)];
}

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多