-3
4

3 に答える 3

2

実用的には、文字列を数値に解析する前にカンマを削除するだけで、機能するはずです。

 NSString *s = [self.calDisplay.stringValue 
                stringByReplacingOccurrencesOfString:@"," withString:@""];

あなたを残して

- (IBAction)digitPressed:(NSButton *)sender {
   if (userIsEnteringANumber) {
       NSString *s = [self.calDisplay.stringValue stringByReplacingOccurrencesOfString:@"," withString:@""];
       NSNumber *number = [formatter numberFromString:[s stringByAppendingString:sender.title]];
       self.calDisplay.stringValue = [formatter stringFromNumber:number];
   } else {
       self.calDisplay.stringValue = sender.title;
       userIsEnteringANumber = YES;
   }
}
于 2012-08-25T10:52:51.443 に答える
1

私はこれが起こると信じています:

あなたが持っている文字列は「2,569」です。これは2000程度です。千単位の区切り文字はコンマであるため、これは正常に機能します。

もう一度ボタンを押すと (例: 1)、文字列は "2,5691" になります。これは適切な数値ではありません。3 桁の区切り文字 (コンマ) が間違っているため、nil 数値になります。「25,691」は正しいですが、「2,5691」です。

これを試して:

- (IBAction)digitPressed:(NSButton *)sender {
    if (userIsEnteringANumber) {
        double previous = [[self.calDisplay.stringValue] doubleValue];
        double pressed = [sender.title doubleValue];
        NSNumber *number = [NSNumber numberWithDouble:previous*10+pressed];
        self.calDisplay.stringValue = [formatter stringFromNumber:number];
    }
    else {
        self.calDisplay.stringValue = sender.title;
        userIsEnteringANumber = YES;
    }
}
于 2012-08-12T16:11:36.447 に答える
0

ここでフォーマッタに問題がないことを指摘するbogdansrcの回答を拡張するには、この (宿題?) 問題を解決する 1 つの方法として、ディスプレイに既に 2 倍として表示されている文字列に数字を入力できるようにします。次のようになります。

- (IBAction)digitPressed:(NSButton *)sender {
    if (userIsEnteringANumber)
    {
        double previous = self.calDisplay.stringValue.doubleValue;
        NSString* pressed = sender.title;
        NSString* newNumber = [NSString stringWithFormat:@"%g%s", previous, pressed];
        self.calDisplay.stringValue = [formatter stringFromNumber:[newNumber doubleValue]];
    }
    else
    {
        self.calDisplay.stringValue = sender.title;
        userIsEnteringANumber = YES;
    }
}

もちろん、これは実際には理想的なMVCではありません。コードはモデルを追跡するために View に依存しているためです。そうすることで、 260から 260.4 に移行する方法を提供したコード スニペットだけから知ることは困難です小数のはずの状態になってから4を押すと。小数点以下はstringValueの最後の文字として表示および追跡されていますか? もしそうなら、「。」のために上記は壊れます。最後は迷子になります。そうでない場合、モデルは基本的に一部がビューに分散し一部が別の状態にあるため、理想的ではありません。

于 2012-08-20T17:58:29.743 に答える