我尝试过搜索,但我认为我的谷歌技能不够好,所以我正在寻求人们的帮助。我正在扫描一个字符串并获取每个元素。我需要找出它是数字还是文本。我以这种方式进行了检查:
// Try to convert to double
@try{
double whatever=[myString doubleValue];
// If text is stored in myString, then it should throw an exception
} @catch (NSException *e){
// Do whatever I need, but here I know that it's text, not a number
}
但是我发现 Objective-C 不会抛出异常,它只是返回 0。我不能依赖用户不会使用零作为输入的事实,我该怎么办?
提前感谢,我很确定有这样的踏板,我只是没有找到它们......
试试这个:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *number = [formatter numberFromString:myString];
if (number) {
// it's a number
} else {
// it's not a number
}
转换为双精度并返回字符串。如果它与来源匹配,那么它是一个双精度。 小心前导空格和尾随空格。
您可以使用类 NSScanner 来查找您是否通过此方法获得了有效的double
:
- (BOOL)scanDouble:(double *)doubleValue
使用字符串初始化扫描仪后。
为什么(double *)
?
因为您希望该方法返回给您 2 个信息,the doubleValue
和 is it a valid double
.后者由 BOOL 给出,对于前者,只有指针可以从方法调用中获取值(除了返回值)
参数
双倍值
返回时,包含扫描值。溢出时包含 HUGE_VAL 或 –HUGE_VAL,下溢时包含 0.0。
返回值
如果接收方找到有效的浮点表示形式,则为 YES,否则为 NO。
NSMutableString *stringElement = [NSMutableString stringWithCapacity:[yourString length]];
for (int i=0; i<[yourString length]; i++) {
if (isdigit([stringElement characterAtIndex:i])) {
//is digit
}
}
示例:
NSError* error;
NSString* string=@"10";
NSNumberFormatter* formatter=[NSNumberFormatter new];
formatter.numberStyle= NSNumberFormatterDecimalStyle; // set whatever style you need
NSNumber* number;
if([formatter getObjectValue: &number forString: string errorDescription: &error])
{
// You got the number
NSLog(@"%@",number);
}
else
{
// haven't got the number, the string is invalid
NSLog(@"%@",error);
}