2013-04-09 261 views
0

只是試圖捕獲非數字輸入 閱讀很多項目。嘗試了十進制數字字符集(發現很難相信以單詞「十進制」開頭的內容不包含小數)。試過可變字符集來添加小數。一直在努力將「10.5」與「96」包括在內,但仍排除「abc」。「isnan」似乎不起作用

下面的代碼生成「是一個數字」不管是什麼,我把在TextBox1中

double whatTheHey; 

whatTheHey = _textBox1.text.doubleValue; 

if isnan(whatTheHey) { 
    _textBox2.text = @"NOT a number > "; 
} 

if (!isnan(whatTheHey)) { 
    _textBox2.text = @"IS a number > "; 
} 

10.5,99,QWERTY全收益「是一個數字」

這似乎是一個赫克很多工作只是爲了捕獲非數字輸入。

有沒有人有任何工作代碼捕捉非數字但接受數字小數在他們的工作代碼簡單的例子?

回答

0

到請檢查是否一個字符串是數字或不能使用下面的一段代碼。

NSString *newString = @"11111"; 
    NSNumberFormatter *nf = [NSNumberFormatter new]; 
    BOOL isDecimal = [nf numberFromString:newString] != nil; 
+0

謝謝大家! - 這是我能夠開始工作的一部分 - 我想其他解決方案也可以工作 - 我可能沒有正確應用它們 - 再次感謝。 – user2117002 2013-04-09 17:14:15

1

NaN確實不是字面意思是「任何不是數字的東西」。它是一個特定值的名稱 - 即一個浮點數可以在某些不確定操作之後具有,例如零除零或取負數的平方根。有關更多歷史,請參閱the Wikipedia entry

要實際解析字符串的數值,你可能想看看NSNumberFormatter

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
NSNumber *a = [numberFormatter numberFromString:@"10.5"]; 
NSNumber *b = [numberFormatter numberFromString:@"96"]; 
NSNumber *c = [numberFormatter numberFromString:@"abc"]; 
NSLog(@"a: %@, b: %@, c: %@", a, b, c); 

產量: a: 10.5, b: 96, c: (null)

符合特定條件的更簡單(如果不那麼靈活的)解決方案可能是:

BOOL isNumber(NSString *aString){ 
    return [aString integerValue] || [aString floatValue]; 
} 

但是,如果你正在寫的iOS(或OS X),你真的應該與NSFormatter s一起舒服。他們會讓你的生活變得更輕鬆。

+0

感謝您的所有信息和建議! – user2117002 2013-04-10 12:48:33

0

試試這個。我認爲它應該做你需要的東西:

- (BOOL)isStringNumeric:(NSString *)input { 
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
    NSNumber *number = [numberFormatter numberFromString:input]; 
    return (number != nil); 
}