如何在Objective-C中检查输入是双精度还是字符串?
Posted
技术标签:
【中文标题】如何在Objective-C中检查输入是双精度还是字符串?【英文标题】:How to check if input is double or string in Objective-C? 【发布时间】:2012-07-06 14:23:48 【问题描述】:如何检查给定的输入是字符串还是双精度?我尝试做[self.display.text doubleValue]
,如果这不是一个有效的双精度,它返回 0,但问题是 0 实际上是一个实际双精度的有效输入,所以程序不会知道它是默认错误回退还是实际有效输入。
你如何解决这个问题?
【问题讨论】:
使用NSPredicate
并尝试对其进行正则表达式匹配。
@Eimantas 所以只需将NSPredicate
与诸如^[0-9](\.[0-9]+)?$
之类的正则表达式一起使用并对其进行测试?
是的,但我会使用更简单的 POSIX [:number:]
模板来检查它是否与数字匹配。
【参考方案1】:
-[NSFormatter getObjectValue:forString:range:error:]
做你想做的事。
更多详情here.
【讨论】:
【参考方案2】:您可以使用正则表达式和 NSPredicate 来测试它是否为双精度值。
NSPredicate *predicate;
predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES '^[-+]?[0-9]*\.?[0-9]+$'"];
BOOL result = [predicate evaluateWithObject:@"yourdoublevaluehere"];
您可能需要调整正则表达式,因为我在脑海中写下了它。
【讨论】:
【参考方案3】:使用 strtod
(reference) 以“C”方式执行,因为它会为您提供解析的最后一个字符:
NSString *input = @"123.456";
char *endptr;
double value = strtod([input UTF8String], &endptr);
if (*endptr != '\0')
NSLog(@"input is a string");
【讨论】:
以上是关于如何在Objective-C中检查输入是双精度还是字符串?的主要内容,如果未能解决你的问题,请参考以下文章
C ++ 11中“auto var = condition?1:1.0”的类型是啥?它是双精度还是整数?