2013-04-09 2 views
0

Просто пытается поймать не числовой ввод Прочтите МНОГО элементов. Пробовал decimalDigitCharacterSet (было сложно поверить, что что-то, начинающееся со слова «десятичное», не содержит десятичного числа). Попробовал измененный набор символов, чтобы добавить десятичное число. Работал, чтобы включить «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

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

0

Попробуйте это. Я думаю, что он должен делать то, что вам нужно:

- (BOOL)isStringNumeric:(NSString *)input { 
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
    NSNumber *number = [numberFormatter numberFromString:input]; 
    return (number != nil); 
} 
Смежные вопросы