0

只是试图捕捉非数字输入 Read MANY items 。尝试了 decimalDigitCharacterSet(发现很难相信以“十进制”开头的东西不包含小数)。尝试使用可变字符集添加小数。一直在努力将“10.5”包含在“96”中,但仍然排除“abc”。

无论我在 textbox1 中输入什么,以下代码都会产生“IS 一个数字”

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 都产生 "IS a number"

这似乎只是为了捕捉非数字输入而做的大量工作。

有没有人有任何简单明了的工作代码示例来捕获非数字但接受带有小数的数字?

4

3 回答 3

1

NaN并不是字面意思“任何不是数字的东西” 它是一个特定值的名称——即一个浮点数可以在某些不确定的操作之后具有,例如将零除以零或取负数的平方根。有关更多历史记录,请参阅Wikipedia 条目

要实际解析字符串的数值,您可能需要查看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)写的,你真的应该对NSFormatters. 他们会让你的生活更轻松。

于 2013-04-09T14:27:27.243 回答
0

试试这个。我认为它应该做你需要的:

- (BOOL)isStringNumeric:(NSString *)input {
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    NSNumber *number = [numberFormatter numberFromString:input];
    return (number != nil);
}
于 2013-04-09T14:35:25.567 回答
0

检查字符串是否为数字或不使用以下代码。

    NSString *newString = @"11111";
    NSNumberFormatter *nf = [NSNumberFormatter new];
    BOOL isDecimal = [nf numberFromString:newString] != nil;
于 2013-04-09T14:36:12.700 回答