より効率的な方法があると確信していますが、次のことができます。
NSArray *strings = @[@"¥1,234",@"AU$3,456.78",@"56.78€"];
NSCharacterSet *nonNumbersSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet];
for (NSString *string in strings)
{
NSString *result = [string stringByTrimmingCharactersInSet:nonNumbersSet];
result = [result stringByReplacingOccurrencesOfString:@"," withString:@""];
CGFloat floatResult = [result floatValue];
NSLog(@"%@ -> %.2f", result, floatResult);
}
または、スキャナーを使用できます。
NSArray *strings = @[@"¥1,234",@"AU$3,456.78",@"56.78€"];
NSCharacterSet *numbersSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789.,"];
for (NSString *string in strings)
{
NSString *result;
NSScanner *scanner = [NSScanner scannerWithString:string];
[scanner scanUpToCharactersFromSet:numbersSet intoString:nil];
[scanner scanCharactersFromSet:numbersSet intoString:&result];
result = [result stringByReplacingOccurrencesOfString:@"," withString:@""];
CGFloat floatResult = [result floatValue];
NSLog(@"%@ -> %.2f", result, floatResult);
}
もちろん、これらは、数値が千単位の区切り文字としてコンマを使用していることを前提としています。
NSNumberFormatter
:を使用することもできます
NSArray *strings = @[@"¥1,234",@"AU$3,456.78",@"56.78€"];
NSCharacterSet *nonNumbersSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789.,"] invertedSet];
for (NSString *string in strings)
{
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
NSString *result = [string stringByTrimmingCharactersInSet:nonNumbersSet];
NSNumber *numberResult = [formatter numberFromString:result];
NSLog(@"%@ -> %.2f", result, [numberResult floatValue]);
}