2013-08-21 1 views
1

У меня есть приложение, в котором у меня есть метод, который вставляет запятую в NSString в значениях тысяч. Я также хочу включить decimall, как если бы я ввел сейчас 1000, тогда он показывает 1000, используя этот метод, но Я хочу 1000.00, как это здесь, мой метод любой идеи, как исправить эту проблему.Как получить String с двумя десятичными знаками в приложении iphone

- (NSString *)formatStringF:(NSString *)string { 
// Strip out the commas that may already be here: 
NSString *newString = [string stringByReplacingOccurrencesOfString:@"," withString:@""]; 
if ([newString length] == 0) { 
    return nil; 
} 

// Check for illegal characters 
NSCharacterSet *disallowedCharacters = [[NSCharacterSet characterSetWithCharactersInString:@"."] invertedSet]; 
NSRange charRange = [newString rangeOfCharacterFromSet:disallowedCharacters]; 
if (charRange.location != NSNotFound) { 
    return nil; 
} 

// Split the string into the integer and decimal portions 
NSArray *numberArray = [newString componentsSeparatedByString:@"."]; 
if ([numberArray count] > 2) { 
    // There is more than one decimal point 
    return nil; 
} 

// Get the integer 
NSString *integer   = [numberArray objectAtIndex:0]; 
NSUInteger integerDigits = [integer length]; 
if (integerDigits == 0) { 
    return nil; 
} 


// Format the integer. 
// You can do this by first converting to a number and then back to a string, 
// but I would rather keep it as a string instead of doing the double conversion. 
// If performance is critical, I would convert this to a C string to do the formatting. 
NSMutableString *formattedString = [[NSMutableString alloc] init]; 
if (integerDigits < 4) { 
    [formattedString appendString:integer]; 
} else { 
    // integer is 4 or more digits 
    NSUInteger startingDigits = integerDigits % 3; 
    if (startingDigits == 0) { 
     startingDigits = 3; 
    } 
    [formattedString setString:[integer substringToIndex:startingDigits]]; 
    for (NSUInteger index = startingDigits; index < integerDigits; index = index + 3) { 
     [formattedString appendFormat:@",%@", [integer substringWithRange:NSMakeRange(index, 3)]]; 
    } 
} 

// Add the decimal portion if there 
if ([numberArray count] == 2) { 
    [formattedString appendString:@"."]; 
    NSString *decimal = [numberArray objectAtIndex:1]; 
    if ([decimal length] > 0) { 
     [formattedString appendString:decimal]; 
    } 
} 






return formattedString; 
} 
+0

Просто преобразовать значение в Float и затем преобразовать его в строку как [NSString stringwithformat: @ "%. 2f", FloatValue]. –

+0

@ArmaanStranger Это не даст группировки, и оно не будет правильно отформатировано в соответствии с локали пользователя. – rmaddy

ответ

3

Зачем изобретать велосипед? Просто используйте NSNumberFormatter.

double someNumber = 1000.0; 

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
// Use decimal style - this includes grouping 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
// Force two decimal places 
[formatter setMinimumFractionDigits:2]; 
[formatter setMsximumFractionDigits:2]; 

NSString *formattedNumber = [formatter stringFromNumber:@(someNumber)]; 

Это также имеет то преимущество, что оно будет правильно отформатировать номер на основе локали пользователя.

Он появится как 1,000.00 или 1.000,00 или 1 000,00 или какой-либо другой правильный формат для пользователя.

+0

спасибо за помощь –

+0

Это хороший способ. –

+0

BTW - Если вы действительно хотите форматировать валюту, измените стиль на 'NSNumberFormatterCurrencyStyle' и не устанавливайте количество цифр дроби. – rmaddy

Смежные вопросы