Преобразование int в укороченную форматированную строку

Пользователь введет значение в долларах как int, и я хотел бы преобразовать результат в сокращенную отформатированную строку. Таким образом, если пользователь введет 1700, в строке будет указано «1,7 тыс. долларов». Если пользователь введет 32600000, в строке будет указано «32,6 млн долларов».

Обновление

Вот код, который у меня есть до сих пор. Вроде работает для номеров ~10k. Я бы просто добавил больше операторов if для больших чисел. Но есть ли более эффективный способ сделать это?

NSNumberFormatter *nformat = [[NSNumberFormatter alloc] init]; 
[nformat setFormatterBehavior:NSNumberFormatterBehavior10_4]; 
[nformat setCurrencySymbol:@"$"]; 
[nformat setNumberStyle:NSNumberFormatterCurrencyStyle]; 
double doubleValue = 10200; 
NSString *stringValue = nil; 
NSArray *abbrevations = [NSArray arrayWithObjects:@"k", @"m", @"b", @"t", nil] ; 

for (NSString *s in abbrevations) 
{ 

    doubleValue /= 1000.0 ; 

    if ( doubleValue < 1000.0 ) 
    { 

        if ( (long long)doubleValue % (long long) 100 == 0 ) { 
            [nformat setMaximumFractionDigits:0]; 
        } else {                 
            [nformat setMaximumFractionDigits:2]; 
        } 

        stringValue = [NSString stringWithFormat: @"%@", [nformat stringFromNumber: [NSNumber numberWithDouble: doubleValue]] ]; 
        NSUInteger stringLen = [stringValue length]; 

        if ( [stringValue hasSuffix:@".00"] ) 
        {                
            // Remove suffix 
            stringValue = [stringValue substringWithRange: NSMakeRange(0, stringLen-3)];             
        } else if ( [stringValue hasSuffix:@".0"] ) { 

            // Remove suffix 
            stringValue = [stringValue substringWithRange: NSMakeRange(0, stringLen-2)]; 

        } else if ( [stringValue hasSuffix:@"0"] ) { 

            // Remove suffix 
            stringValue = [stringValue substringWithRange: NSMakeRange(0, stringLen-1)];         
        } 


        // Add the letter suffix at the end of it 
        stringValue = [stringValue stringByAppendingString: s]; 

        //stringValue = [NSString stringWithFormat: @"%@%@", [nformat stringFromNumber: [NSNumber numberWithDouble: doubleValue]] , s] ; 
        break ; 
    }    
}  

NSLog(@"Cash = %@", stringValue); 
5
задан jscs 16 August 2012 в 19:39
поделиться