我正在为iPad开发应用程序。我想知道如何找出一个字符串是否可以转换为double。例如,NSNumberFormatter的[myString floatValue]和numberFromString方法都会识别一些像“123rrrrr”这样的字符串作为有效数字,并返回它的数字部分,即123!确定字符串是否有效整数Objective C IOS
你能帮我吗?
我正在为iPad开发应用程序。我想知道如何找出一个字符串是否可以转换为double。例如,NSNumberFormatter的[myString floatValue]和numberFromString方法都会识别一些像“123rrrrr”这样的字符串作为有效数字,并返回它的数字部分,即123!确定字符串是否有效整数Objective C IOS
你能帮我吗?
您可以将NSScanner用于这些目的。它具有从字符串中过滤浮动和双打的方法。
的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;
}