• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> Klick

iPhone Taschenrechner gibt immer 0 aus

fritzl

Wohlschmecker aus Vierlanden
Registriert
01.06.08
Beiträge
237
Hallo Leute und erstemal ein frohes Fest!

Also ich habe ein Problem versuche seit gestern einen Taschenrechner fürs iPhone zu programmieren, habe nur Vorkenntnisse aus Java, weswegen ich den Fehler nicht finde.

Also das Problem ist, egal was ich eingebe und klicke er berechnet immer 0.00. Hier mal der Code.

Code:
@implementation rechner

- (void)awakeFromNib
{
	[aFeld becomeFirstResponder];
	[bFeld becomeFirstResponder];
}

- (IBAction)berechne:(id)sender;

{

	NSString *aString = aFeld.text;
	NSString *bString = bFeld.text;

	int eingabeA = [aString intValue];
	int eingabeB = [bString intValue];
	

	if (sender == plus) {
	
		int ergebnis = eingabeA + eingabeB;
		rFeld.text = [NSString stringWithFormat:@"%.02f", ergebnis];
	}
	if (sender == minus) {
	
		int ergebnis = eingabeA - eingabeB;
		rFeld.text = [NSString stringWithFormat:@"%.02f", ergebnis];

	}
	if (sender == mal) {
	
		int ergebnis = eingabeA * eingabeB;	
		rFeld.text = [NSString stringWithFormat:@"%.02f", ergebnis];

	}
	if (sender == geteilt) {
	
		int ergebnis = eingabeA / eingabeB;
		rFeld.text = [NSString stringWithFormat:@"%.02f", ergebnis];

	}
	if (sender == modulo) {
	
		int ergebnis = (eingabeA % eingabeB);
		rFeld.text = [NSString stringWithFormat:@"%.02f", ergebnis];

	}
	
}


@end

Code:
#import <Foundation/Foundation.h>


@interface rechner : NSObject {
	
	IBOutlet UITextField *aFeld;
	IBOutlet UITextField *bFeld;
	IBOutlet UITextField *rFeld;
	
	IBOutlet UIButton *plus;
	IBOutlet UIButton *minus;
	IBOutlet UIButton *mal;
	IBOutlet UIButton *geteilt;
	IBOutlet UIButton *modulo;
	
	NSString *aString;
	NSString *bString;

}

- (IBAction)berechne:(id)sender;

@end

Hoffe ihr könnt mir sagen was ich falsch gemacht habe ;)

Danke!
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
Hallo,

habe nur Vorkenntnisse aus Java
Cocoa/Objective-C ist eine andere Welt.

Ich habe Deinen Code nur drei Sekunden angesehen und kann Dir sagen:

Ein Integer kann nur Ganzzahlen aufnehmen (1 oder 2 oder 3 usw.). Wenn Du Rechenoperationen durchführst, dann bekommst Du aber z.B. 3.14 raus.
Konsequenterweise kann Dein Variable das nicht aufnehmen (ist aber auch bei Java so).
Deine Ausgabe mit @"%.02f" erwartet ein Float (deshalb das f) Du gibst aber ein Integer.
Probiere mal @"%d", dann funktioniert es schon mal bei ein paar Fällen ;)

Das Beste ist, wenn Du Dir die zunächst die Grundlagen aneignest.

Viele Grüße
 

fritzl

Wohlschmecker aus Vierlanden
Registriert
01.06.08
Beiträge
237
Ich weiss sehr wohl was ein Int ist und habe mich mit absicht gegen float entschieden weil ich modulo implementieren will.
 

fritzl

Wohlschmecker aus Vierlanden
Registriert
01.06.08
Beiträge
237
Deine Ausgabe mit @"%.02f" erwartet ein Float (deshalb das f) Du gibst aber ein Integer.
Probiere mal @"%d", dann funktioniert es schon mal bei ein paar Fällen ;)

Genau das wollte ich hören, Danke!
//ich baue ja den Rechner um mir was anzueignen ;)
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
Ja, aber wenn Du Dir schon den Umgang mit den Typen falsch aneignest, dann möchte ich erst gar nicht von Memory Management sprechen ;)

Viele Grüße
 

Pii

Rheinischer Krummstiel
Registriert
25.06.07
Beiträge
383
Beherzige den Ratschlag und eigne Dir erstmal Grundlagen an. In deinem Code sind nämlich noch mehr Dinge krumm.
 

IrgenteinName

Braeburn
Registriert
31.08.10
Beiträge
44
Moin Fritzl,

nur mal so meine 2 Cent an Meinung:

Du willst nicht wirklich mit ifs arbeiten. Mache lieber jede Rechenoperation zu einer IBAction und verbinden sie mit den jeweiligen Knopf im View.
Und statt float nimm NSNumber. Wenn NSNumber nicht klar ist, das Wort in Xcode markieren, rechts klick und dann "Find Text in Documentation" auswählen.

Ansonsten kannst Du auch hier nach einer Liste mit Tutorials und Codebeispielen schauen.

gruss

Olaf
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
Warum sollte man nicht float bzw. CGFloat nehmen?

Viele Grüße
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
In einfachen Worten, weil das Rechnen mit floats nicht sehr genau ist und der OP eigentlich einen Taschenrechner programmieren will.
Dir ist klar, dass NSNumber nur ein „Container“ für skalare C Typen ist? Mit NSNumber gewinnt er genau gar nichts an Präzision. Wenn schon, dann nimmt man NSDecimalNumber.

Und der erste Link erklärt auch, dass nur NSDecimalNumber mehr Präzision bringt.

MacApple
 

IrgenteinName

Braeburn
Registriert
31.08.10
Beiträge
44
Gut das es wenigstens einer noch mal gelesen und mitgedacht hat.

gruss

Olaf