1

小数点のボタンを押すと、小数点を入れたい電卓があります。小数点を取得しますが、別の数字を入力すると、小数点が消えて上書きされます。

10 進数プレスのコードは以下のとおりです。

-(IBAction)decimalPressed:(id)sender{
  calculatorScreen.text = [calculatorScreen.text stringByAppendingString:@"."];
}

桁押しの場合は次のとおりです:-

-(IBAction)buttonDigitPressed:(id)sender{
  currentNumber = currentNumber*10 + (float)[sender tag];
  calculatorScreen.text = [NSString stringWithFormat:@"%g",currentNumber];
}

どうすれば23のようなことをすることができますか?次に 45。結果は 23.45 になります。

4

6 に答える 6

2

最近、電卓アプリを作成しましたが、問題を理解できました。ポイントについて注意したいもう1つのことは、計算に複数のポイントを含めたくないということです(例:10.345.1123.5)。簡単に言えば、それを正当な浮動小数点数にする必要があります。

そうは言っても、IBActionを使用できます(ストーリーボードまたはxibファイルにリンクすることを忘れないでください)

-(IBAction)decimalPressed:(UIButton *)sender
{
 NSRange range = [self.display.text rangeOfString:@"."];
if (range.location ==NSNotFound){
self.display.text = [ self.display.text stringByAppendingString:@"."];
}
self.userIsInTheMiddleOfEnteringANumber = YES;
}

同じプロジェクトで実行している可能性はありますが、まったく異なる可能性もあるため(自分でゼロから開始する場合)、いくつかのコードを確認します。

UIButtonをデフォルトのIDに置き換えることもできますが、自分自身またはコードを表示する他の人に明確に説明するために、静的に置き換えることをお勧めします。

名前が示すようにNSRangeは範囲をマークし、範囲は計算の表示テキスト(1235.3568など)になります。この場合、対象となる文字列の範囲は「。」です。したがって、NSNotfound(rangeOfString "。"がテキスト範囲に見つからない)の場合、現在の表示テキストに"。"を追加します。関数stringByAppendingString:@ "。"を使用すると、他に存在しないため、"。"の場合は関数は実行されません。はすでに検出されており、ディスプレイ上の複数のポイントの問題を解決します。

userIsInTheMiddleOfEnteringANumberは、表示に0が表示される問題(06357など)を解決するためのBOOLです。変更するメソッドがある場合は、メソッド名を独自のメソッド名に置き換えてください。

于 2012-05-31T03:48:58.420 に答える
0

これが私の解決策です:

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {
    float result;
    IBOutlet UILabel *TextInput;
    int currentOperation;
    float currentNumber;
    BOOL userInTheMiddleOfEnteringDecimal;
}

- (IBAction)buttonDigitPressed:(id)sender;
- (IBAction)buttonOperationPressed:(id)sender;
- (IBAction)cancelInput;
- (IBAction)cancelOperation;
- (IBAction)dotPressed;
@end

ViewController.m

#import "ViewController.h"

@interface ViewController ()


@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

- (IBAction)buttonDigitPressed:(id)sender {
    if(!userInTheMiddleOfEnteringDecimal)
    {
        currentNumber = currentNumber*10 + (float)[sender tag];
        TextInput.text = [NSString stringWithFormat:@"%d",(int)currentNumber];
    }
    else{
        TextInput.text= [TextInput.text stringByAppendingString:[NSString stringWithFormat:@"%d",[sender tag]]];
        currentNumber = [TextInput.text floatValue];
    }
}

- (IBAction)buttonOperationPressed:(id)sender {
    if (currentOperation == 0) result = currentNumber;
    else {
        switch (currentOperation) {
            case 1:
                result = result + currentNumber;
                break;
            case 2:
                result = result - currentNumber;
                break;
            case 3:
                result = result * currentNumber;
                break;
            case 4:
                result = result / currentNumber;
                break;
            case 5:
                currentOperation = 0;
                break;
            default:
                break;
        }
    }
    currentNumber = 0;
    TextInput.text = [NSString stringWithFormat:@"%.2f",result];
    if ([sender tag] == 0) result = 0;
    currentOperation = [sender  tag];
    userInTheMiddleOfEnteringDecimal = NO;
}

-(IBAction)cancelInput{
    currentNumber = (int)(currentNumber/10);
    TextInput.text = [NSString stringWithFormat:@"%.2f",currentNumber];;
}

-(IBAction)cancelOperation{
    currentNumber = 0;
    TextInput.text = @"0";
    userInTheMiddleOfEnteringDecimal = NO;
}
- (IBAction)dotPressed{
    if(!userInTheMiddleOfEnteringDecimal){
        userInTheMiddleOfEnteringDecimal = YES;
        TextInput.text= [TextInput.text stringByAppendingString:@"."];
    }
}

@end

これが役立つことを願っています..別の解決方法...

于 2012-11-04T12:03:55.380 に答える
0

以下のコードで試してください:

-(IBAction)buttonDigitPressed:(id)sender
{
     UIButton *pressedButton = (UIButton *)sender;
     calculatorScreen.text = [calculatorScreen.text stringByAppendingFormat:@"%d",pressedButton.tag];
     currentNumber = [calculatorScreen.text floatValue];
}
于 2012-05-30T12:26:49.477 に答える
0
-(IBAction)ButtonDot
{
    decimalChecker = 10;
    calculatorScreen.text = [NSString stringWithFormat:@"$ %g.", currentSavings];
    decimalChecker=1;

}

-(IBAction)buttonDigitPressed:(id)sender
{
if (decimalChecker ==1) 
{        
    currentDecimal = currentDecimal*10 + (float)[sender tag];
    calculatorScreen.text = [NSString stringWithFormat:@"$ %g.%g",      currentSavings,currentDecimal];       
}
else
{
    currentSavings = currentSavings*10 + (float)[sender tag];
    calculatorScreen.text = [NSString stringWithFormat:@"$ %g",currentSavings];
}
}
于 2012-08-17T17:39:58.030 に答える
-1

私はそれであなたの問題を解決すると思います

http://www.datasprings.com/resources/articles-information/iphone-sdk-getting-started-example-code

電卓のサンプルコードがあります。

于 2012-05-30T12:37:37.907 に答える
-1

「。」を押した後 以降のすべての値は、「.」を押した後に押す最初の数字に従って分割されます。100 で 2 番目に 10 で割られます。

ur関数を編集すると、次のようになります

-(IBAction)buttonDigitPressed:(id)sender{
  currentNumber = currentNumber + (float)[sender tag] / 10.0;
  calculatorScreen.text = [NSString stringWithFormat:@"%g",currentNumber];
}
于 2012-05-30T12:24:42.397 に答える