如何在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”的类型是啥?它是双精度还是整数?

qgis双精度怎么弄

当它是双精度时,LookUpEdit 不选择新输入的值

如何在 Swiftyjson 中检查值是日期字符串还是双精度值?

在 MATLAB 中,默认情况下变量真的是双精度的吗?

检查双精度值是不是为整数 - Swift