5

検索してみましたが、グーグルのスキルが足りないと思いますので、よろしくお願いします。文字列をスキャンして、各要素を取得しています。数字なのかテキストなのかを調べる必要があります。私はそのようにチェックを行いました:

// Try to convert to double
@try{
double whatever=[myString doubleValue];

// If text is stored in myString, then it should throw an exception
} @catch (NSException *e){

// Do whatever I need, but here I know that it's text, not a number


}

しかし、Objective-Cは例外をスローせず、0を返すだけであることがわかりました。ユーザーが入力としてゼロを使用しないという事実に頼ることはできません。どうすればよいですか?

よろしくお願いします。このような踏板があると確信していますが、見つかりませんでした...

4

5 に答える 5

2

doubleに変換し、stringに戻します。ソースと一致する場合、それはダブルでした。先頭と末尾のスペースに注意してください。

于 2012-12-19T02:23:31.857 に答える
2

これを試して:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];

NSNumber *number = [formatter numberFromString:myString];

if (number) {
  // it's a number
} else {
  // it's not a number
}
于 2012-12-19T03:57:10.390 に答える
1

クラスNSScannerdoubleを使用して、このメソッドで有効なものを取得したかどうかを確認できます。

- (BOOL)scanDouble:(double *)doubleValue

文字列でスキャナーを初期化したら。


なぜ(double *)ですか?
メソッドが2つの情報を返すようにしたいので、the doubleValueそしてis it a valid double。後者はBOOLによって与えられ、前者の場合、ポインターのみがメソッド呼び出しから値を取得できます(戻り値は別として)

パラメータ
doubleValue
戻ると、スキャンされた値が含まれます。オーバーフローの場合はHUGE_VALまたは–HUGE_VAL、アンダーフローの場合は0.0が含まれます。 受信者が有効な浮動小数点表現を見つけた場合はYESを
返し、そうでない場合はNOを返します。

于 2012-12-19T02:27:16.200 に答える
0
NSMutableString *stringElement = [NSMutableString stringWithCapacity:[yourString length]];
for (int i=0; i<[yourString length]; i++) {
    if (isdigit([stringElement characterAtIndex:i])) {
      //is digit
    }
}
于 2012-12-19T02:33:36.683 に答える
0

例:

NSError* error;
NSString* string=@"10";
NSNumberFormatter* formatter=[NSNumberFormatter new];
formatter.numberStyle= NSNumberFormatterDecimalStyle; // set whatever style you need
NSNumber* number;
if([formatter getObjectValue: &number forString: string errorDescription: &error])
{
    // You got the number
    NSLog(@"%@",number);
}
else
{
    // haven't got the number, the string is invalid
    NSLog(@"%@",error);
}
于 2012-12-19T02:50:56.107 に答える