2

私は悪名高いスタンフォード電卓の課題に取り組んでいます。102.3.79 のような数値を処理できるように、入力された数値が有効な float 値であることを確認する必要があります。

文字列のピリオドを数える小さなループを書かなくても済むようにするには、組み込み関数が必要です。

4

4 に答える 4

8

C 標準ライブラリ関数を使用できますstrtod()。エラーが発生したところで停止し、それに応じて出力引数を設定します。この事実を次のように利用できます。

- (BOOL)isValidFloatString:(NSString *)str
{
    const char *s = str.UTF8String;
    char *end;
    strtod(s, &end);
    return !end[0];
}
于 2013-02-10T21:45:05.887 に答える
2
-(BOOL) isNumeric:(NSString*)string {    
    NSNumberFormatter *formatter = [NSNumberFormatter new];
    [formatter setNumberStyle:NSNumberFormatterDecimalStyle];
    NSNumber *number = [formatter numberFromString:string];
    [formatter release]; // if using ARC remove this line
    return number!=nil;
}

-(BOOL) isFloat:(NSString*)string {
    NSScanner *scanner = [NSScanner scannerWithString:string];
    [scanner scanFloat:NULL];
    return [scanner isAtEnd];
}
于 2013-02-10T22:32:19.743 に答える
2

@"."文字列をカウントするためのかなり洗練されたソリューションが少なくとも 1 つあります。

NSString *input = @"102.3.79";
if([[input componentsSeparatedByString:@"."] count] > 2) {
    NSLog(@"input has too many points!");
}

もう少し深く掘り下げます... 文字列全体を数値として検証する場合は、NSNumberFormatterand 呼び出しを構成してみてくださいnumberFromString:( NSNumberFormatter ドキュメント)。

于 2013-02-10T22:20:03.893 に答える
2

CS193P を経験したので、C の使用と C の使用に慣れることが目的だと思いますNSString。ボタンが押され、数字 1 を連結して使用し、2 を表示するため UILabel、単純な小数点フラグを検討します。BOOL

これは、数値の末尾に小数点をぶら下げたり、ユーザーが数値をバックスペースできるようにするなど、他のチェックを行うときにも便利です。

たとえば編集:

各数字ボタンに接続された IBAction を作成します。

- (IBAction)numberButtonPressed:(UIButton *)sender 
{  
  if([sender.titleLabel.text isEqualToString:@"."])
  {
    if (!self.inTheMiddleOfEnteringANumber)
        self.display.text=[NSString stringWithString:@"0."];

    else if (!self.decimalPointEntered)
      {
        self.display.text=[self.display.text stringByAppendingString:sender.titleLabel.text]; 
        self.decimalPointEntered=TRUE;
      }
   }   
self.inTheMiddleOfEnteringANumber=TRUE;
}
于 2013-02-10T22:04:51.353 に答える