Приложение iPhone Calculator Нежелательные десятичные знаки

Недавно я посмотрел учебник по калькулятору для iPhone. Это работает, однако у меня проблема с нежелательными десятичными знаками. Это означает, что мое приложение поставит точку после моего числа и после него будет около 6 0. Я посмотрел, как это исправить, и попробовал то, что увидел, однако это работает только тогда, когда я ввожу первое число. Когда я нажимаю кнопку «Умножение», «Деление», «Вычитание» или «Сложение», они снова появляются, и когда он показывает ответ, он включает нежелательные десятичные дроби тоже. Мой код ниже, пожалуйста, помогите мне Спасибо!

ViewController.h

//
//  ViewController.h
//  Simple Calculator
//
//  Created by Michael on 2013-08-08.
//  Copyright (c) 2013 com.company. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {

    float result;
    IBOutlet UILabel *calculatorScreen;
    int currentOperation;
    float currentNumber;
    BOOL userInTheMiddleOfEnteringDecimal;


}
-(IBAction)buttonDigitPressed:(id)sender;
-(IBAction)buttonOperationPressed:(id)sender;
-(IBAction)cancelInput;
-(IBAction)cancelOperation;



@end

ViewController.m

//
//  ViewController.m
//  Simple Calculator
//
//  Created by Michael on 2013-08-08.
//  Copyright (c) 2013 com.company. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

-(IBAction)buttonDigitPressed:(id)sender {
    if (!userInTheMiddleOfEnteringDecimal)
    {
    currentNumber = currentNumber *10 + (float ) [sender tag];
    calculatorScreen.text = [NSString stringWithFormat:@"%2d",(int)currentNumber];
    }
    else{
        calculatorScreen.text= [calculatorScreen.text stringByAppendingString:[NSString stringWithFormat:@"%d",[sender tag]]];
        currentNumber = [calculatorScreen.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;
        }
    }
    currentNumber = 0;
    calculatorScreen.text = [NSString stringWithFormat:@"%2f",result];
    if ([sender tag] == 0) result=0;
    currentOperation = [sender tag];
    userInTheMiddleOfEnteringDecimal = NO;    
}

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

-(IBAction) cancelOperation {
    currentNumber = 0;
    calculatorScreen.text = @"0";
    userInTheMiddleOfEnteringDecimal = NO;
}

- (IBAction)dotPressed{
    if(!userInTheMiddleOfEnteringDecimal){
        userInTheMiddleOfEnteringDecimal = YES;
        calculatorScreen.text= [calculatorScreen.text stringByAppendingString:@"."];
    }
}


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

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

Спасибо :)


person Michael Wright    schedule 09.08.2013    source источник
comment
P.S. Я новичок в этом, поэтому постарайтесь, чтобы ваш ответ был понятным для меня.   -  person Michael Wright    schedule 10.08.2013


Ответы (1)


В вашем методе buttonOperationPressed:sender вам не хватает точки в строке формата:

calculatorScreen.text = [NSString stringWithFormat:@"%2f",result];

должен быть calculateScreen.text = [NSString stringWithFormat:@"%.2f",result];

то есть %.2f вместо %2f.

Если вам также нужны отступы, вы можете вместо этого использовать %2.2f.

Вот руководство по описателям формата.

person ddevaz    schedule 09.08.2013