0

単純に数値以外の入力をキャッチしようとしています。多くの項目を読み取ります。decimalDigitCharacterSet を試してみました (「小数」という単語で始まるものに小数が含まれていないとは信じがたいです)。小数を追加するために変更可能な文字セットを試しました。「10.5」を「96」に含め、「abc」を除外するように取り組んでいます。

次のコードは、テキストボックス1に何を入れても「IS a number」を生成します

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 a number"

これは、数値以外の入力をキャッチするだけでも大変な作業のようです。

非数値をキャッチするが、小数を含む数値を受け入れる作業コードの露骨な単純な例はありますか?

4

3 に答える 3

1

NaN文字通り「数値ではないもの」という意味ではありませんこれは特定の値の名前です。つまり、0 を 0 で除算したり、負の数の平方根をとったりするなどの特定の不確定演算の後に、1 つの浮動小数点数を持つことができます。歴史の詳細については、ウィキペディアのエントリを参照してください。

文字列の数値を実際に解析するには、おそらく以下を調べます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];
}

NSFormatterしかし、iOS (または OS X) 向けに書いているのであれば、 sに慣れる必要があります。彼らはあなたの人生をずっと楽にしてくれます。

于 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 に答える