如何檢查給定的輸入是字符串還是雙精度?我試過[self.display.text doubleValue]
,如果這不是一個有效的double,它會返回0,但問題是0實際上是一個有效的輸入,所以程序不會知道它是默認的錯誤後備還是實際的有效輸入。如何在Objective-C中檢查輸入是雙字符還是字符串?
你如何解決這個問題?
如何檢查給定的輸入是字符串還是雙精度?我試過[self.display.text doubleValue]
,如果這不是一個有效的double,它會返回0,但問題是0實際上是一個有效的輸入,所以程序不會知道它是默認的錯誤後備還是實際的有效輸入。如何在Objective-C中檢查輸入是雙字符還是字符串?
你如何解決這個問題?
您可以使用正則表達式和NSPredicate來測試,如果它是一個雙精度值。
NSPredicate *predicate;
predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES '^[-+]?[0-9]*\.?[0-9]+$'"];
BOOL result = [predicate evaluateWithObject:@"yourdoublevaluehere"];
您可能需要調整正則表達式,因爲我寫了一個正式表達式,從頭開始。
做它用strtod
(reference)爲您提供分析的最後一個字符「C」的方式:
NSString *input = @"123.456";
char *endptr;
double value = strtod([input UTF8String], &endptr);
if (*endptr != '\0')
{
NSLog(@"input is a string");
}
-[NSFormatter getObjectValue:forString:range:error:]
做你想做的。
更多詳情here。
使用'NSPredicate'並嘗試對它進行正則表達式匹配。 – Eimantas 2012-07-06 14:25:38
@Eimantas所以,只需使用'NSPredicate'與正則表達式,如:'^ [0-9](\。[0-9] +)?$'並測試它呢? – swiftcode 2012-07-06 14:31:07
是的,但我會用更簡單的POSIX'[:number:]'模板來檢查它是否與一個數字匹配。 – Eimantas 2012-07-06 14:49:33