我正在为iPad开发应用程序。我想知道如何找出一个字符串是否可以转换为double。例如,NSNumberFormatter的[myString floatValue]和numberFromString方法都将某些字符串(如“123rrrrr”)识别为有效数字,并返回其编号为123的部分!
你能帮帮我吗?
答案 0 :(得分:0)
您可以将NSScanner用于这些目的。它有方法从字符串中过滤浮点数和双精度数。
答案 1 :(得分:0)
NSNumberFormatter
方法getObjectValue:forString:range:error
可以满足您的需求。这将解析字符串的给定范围内的数字 - 将其设置为整个字符串 - 并返回其使用的字符串的范围 - 如果此范围未延伸到字符串的末尾,则数字后面会有垃圾。
这是一个简单的包装器:
- (BOOL) getNumberValue:(out NSNumber **)parsedNumber
forString:(NSString *)inputString
error:(out NSError **)error
{
NSNumberFormatter *parser = [NSNumberFormatter new];
// remove whitespace so we can easily test if the whole string was parsed OK
NSString *trimmed = [inputString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSUInteger trimmedLength = [trimmed length];
NSRange all = NSMakeRange(0, trimmedLength);
BOOL status = [parser getObjectValue:parsedNumber forString:trimmed range:&all error:error];
if(status && all.length != trimmedLength)
{ // getObjectValue succeeded but garbage after number (if garbage before number getObjectValue will fail)
if (error != NULL)
{ // make appropriate error
*error = [NSError errorWithDomain:NSCocoaErrorDomain
code:NSFormattingError
userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"The value “%@” is invalid.", inputString]
forKey:NSLocalizedDescriptionKey]];
}
status = NO;
}
return status;
}