Xcode 4.2: Taschenrechner

X

xcode42

Mitglied
Thread Starter
Dabei seit
01.12.2011
Beiträge
45
Reaktionspunkte
0
Liebe Leute,

ich bin gerade dabei mein erstes iOS-Projekt zu entwickeln: und zwar einen Taschenrechner. Jedoch kann mein Programm nur mit ganzen Zahlen rechnen. Somit, wenn ich 1/2 eingebe, kommt als Ausgabe eine 0. Hier mein Code:

ViewController.h
Code:
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UILabel *anzeige;
@property (assign, nonatomic) BOOL benutzerTipptGerade;
@property (assign, nonatomic) NSInteger wartendeZahl;
@property (strong, nonatomic) NSString *wartendeOperation;

- (IBAction)zahlGedrueckt:(id)sender;
- (IBAction)operationGedrueckt:(id)sender;
- (NSString*) berechne: (NSString*) operation mitDerZahl: (NSInteger) zahl;
@end

ViewController.m
Code:
#import "ViewController.h"

@implementation ViewController
@synthesize anzeige;
@synthesize benutzerTipptGerade = _benutzerTipptGerade;
@synthesize wartendeZahl = _wartendeZahl;
@synthesize wartendeOperation = _wartendeOperation;

- (NSString*) berechne: (NSString*) operation mitDerZahl: (NSInteger) zahl
{
    if ([operation isEqualToString:@"C"]) {
        return @"0";
    } else if ([operation isEqualToString:@"AC"]) {
        self.wartendeZahl = 0;
        self.wartendeOperation = nil;
        return @"0";
    } else if ([self.wartendeOperation isEqualToString:@"+"]) {
        zahl = self.wartendeZahl + zahl;
    } else if ([self.wartendeOperation isEqualToString:@"-"]) {
        zahl = self.wartendeZahl - zahl;
    } else if ([self.wartendeOperation isEqualToString:@"*"]) {
        zahl = self.wartendeZahl * zahl;
    } else if ([self.wartendeOperation isEqualToString:@"/"]) {
        if (zahl !=0) {
            zahl = self.wartendeZahl / zahl;
        } else {
            NSLog(@"Divison durch Null");
            return @"Fehler";
        }
    }
    
    self.wartendeZahl = zahl;
    self.wartendeOperation = operation;
    return [NSString stringWithFormat:@"%d", zahl];
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

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

- (void)viewDidUnload
{
    [self setAnzeige:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
	[super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
	[super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (IBAction)zahlGedrueckt:(id)sender 
{
    if (self.benutzerTipptGerade == NO) {
        self.anzeige.text = @"";
        self.benutzerTipptGerade = YES;
    }
    self.anzeige.text = [self.anzeige.text stringByAppendingString:[sender currentTitle]];
}

- (IBAction)operationGedrueckt:(id)sender 
{
    self.benutzerTipptGerade = NO;
    self.anzeige.text = [self berechne:[sender currentTitle] mitDerZahl:[self.anzeige.text intValue]];
}

@end

Nun zu meiner Frage. Ich habe einen Button für das Komma angelegt. Den Button lege ich mit einer Aktion an (schätze ich einmal), aber wie muss ich den Code verändern, sodass Kommazahlen angezeigt und berechnet werden können?

Danke für eure Mühe

Xcode42
 
Informiere dich über die Grundlagen der diskreten Datentypen, insbesondere Integer und Float. Dort findest du zugleich deine Antwort.
1/2 = 0 ist hier das korrekte Ergebnis, das ist kein Fehler.
 
  • Gefällt mir
Reaktionen: below
NSInteger sind nur ganze zahlen...
 
dass das ein fehler ist, so wollte ich das nicht ausdrücken -.-
wie kann ich denn nun kommazahlen anzeigen lassen?

PS: Danke für die bis jetzt so hilfreichen antworten
 
NSDouble oder NSFloat?
oder du bestimmst den rest halt anders...
 
wie kann ich denn nun kommazahlen anzeigen lassen?

Dein Problem ist nicht nur das Anzeigen. Du rechnest überall mit ganzen Zahlen. Deine Variablen sind NSInteger, du benutzt intValue um die Zahl aus dem Textfeld zu lesen, du formatierst die Zahl mit %d um sie wieder in ein Textfeld zu bekommen...
 
  • Gefällt mir
Reaktionen: below
Zurück
Oben Unten