“isnan”似乎不起作用

时间:2013-04-09 14:13:24

标签: ios input numeric

只是尝试捕获非数字输入 阅读许多项目。尝试decimalDigitCharacterSet(发现很难相信以“decimal”开头的东西不包含小数)。尝试了可变字符集来添加小数。一直在努力将“10.5”与“96”包括在内并仍然排除“abc”。

以下代码生成“IS是一个数字”,无论我放在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 all yield“IS is number”

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

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

3 个答案:

答案 0 :(得分: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感到满意。它们会让你的生活更轻松。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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