Anfänger taschenrechner Kommata Problem
spacer
Autor Nachricht
Neuling94
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 02.02.12 18:07 
Guten Tag,

ich sitze immernoch an meinem Taschenrechner und habe ein weiteres Problem. Dezimalzahlen!
Das problem ist folgendes: Ich habe gesucht und gesucht aber keine Lösung gefunden wie ich machen kann, dass wenn die ","-Taste gedrückt wurde, auf meinem Display die zahl (z.B. 5) und das das Kommata erscheint (also: 5,). Nachdem ich den ","Knopf gedrückt habe kommt immer die Fehlermeldund:
"5, ist kein gültiger Gleitkommawert"

Meine beiden Ansätze:
(1)
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
procedure TTaschenrechner.hatKnopfKommaGeklickt(Sender: TObject);
begin
hattextfeldDisplay.setzeInhalt (strtofloat(HatTextfeldDisplay.inhaltalstext+','));
end;

(2)
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
procedure TTaschenrechner.hatKnopfKommaGeklickt(Sender: TObject);
begin
hatTextfeldDisplay.setzeInhalt (hattextfeldDisplay.inhaltalstext+',');
end;

(beim 2. kommt die Fehlermeldung, weil ich bei den Zahlenknöpfen auch StrToFloat verwende).

Anmerkung: Den Befehl StrToFloat kennt mein Lehrer nicht (dazu muss ich ja jetzt nichts sagen...) aber ich weiss das er bei meiner Delphi version (5) mit unseren Komponenten funktioniert, jedoch hab ich mir den Befehl selber "beigebracht" (wohl nicht richtig wie es aussieht). Deswegen wäre es schön wenn mir einer helfen könnte, wie ich nun Kommata verwenden kann.

Danke schonmal im Vorraus!

PS.: ich möchte keinen fertigen Quelltext, sondern nur eine Erklärung, da ich es lernen will und nicht einfach eine Lösunge haben möchte!


Zuletzt bearbeitet von Neuling94 am Mo 06.02.12 15:35, insgesamt 1-mal bearbeitet
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 15833
Erhaltene Danke: 737

XP, W7 x64 (Chrome, IE9, FF), Debian, (OSX 10.7)
RAD XE 2, Java (NB), C++, C# (VS 2010), JS/HTML, PHP, Lazarus
BeitragVerfasst: Do 02.02.12 19:03 
Das Problem ist, dass ein Komma am Ende nun einmal keine gültige Zahl ist.

Deshalb kannst du da keine Zahl setzen. Mal abgesehen davon, dass es ohnehin keinen Sinn macht, da es erst einmal um eine zeichenweise Eingabe geht.

Fazit:
Du musst den Inhalt als Text setzen. Wie das mit diesen komischen Schüler-ärger-Komponenten funktioniert, weiß ich nicht, aber ich rate mal...
ausblenden Delphi-Quelltext markieren
1:
HatTextfeldDisplay.SetzeInhaltsText(HatTextfeldDisplay.InhaltsText + ',');
oder (aber die Version ist fast schon zu einfach als dass sie da funktionieren wird...)
ausblenden Delphi-Quelltext markieren
1:
HatTextfeldDisplay.InhaltsText := HatTextfeldDisplay.InhaltsText + ',';
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 452
Erhaltene Danke: 10

Win XP, Debian GNU/Linux
Delphi 2007 Enterprise, Java, C#
BeitragVerfasst: Do 02.02.12 19:15 
Du hast dein Problem eigentlich schon richtig erkannt:

user profile iconNeuling94 hat folgendes geschrieben Zum zitierten Posting springen:

(2)
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
procedure TTaschenrechner.hatKnopfKommaGeklickt(Sender: TObject);
begin
hatTextfeldDisplay.setzeInhalt (hattextfeldDisplay.inhaltalstext+',');
end;

(beim 2. kommt die Fehlermeldung, weil ich bei den Zahlenknöpfen auch StrToFloat verwende).


Du fügst eine Zahl ein: 5, der Inhalt des Felds ist also 5, was eine gültige Zahl darstellt.
Wenn du nun ein , eingibst, dann wird aus dem Text 5,. Dies ist jedoch keine gültige Zahl, da nach dem Komma mindestens noch eine Zahl kommen muss - zumindest für StrToFloat().
Du musst (vermutlich) StrToFloat() nur an einer anderen Stelle bzw. zu einer anderen Zeit aurufen, nämlich erst wenn du die nächste Zahl hinter das Komme angehängt hast.

Wenn du mit 5, rechnen willst, kannst du ja prüfen ob das letzte Zeichen in deinem Eingabefeld ein , ist und dann einfach eine 0 anhängen.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Neuling94 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 04.02.12 15:48 
okay ich habs geschafft.
Das Problem war, dass ich ',' genommen habe und Delphi anstat Komma den Punkt nimmt '.' .
Hab also nun alles als Text deklariert, den '.' drangehängt, und anschließend beim drücken einer ZahlenTaste mitels StrToFloat alles zurück zur Zahl gebracht.

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
procedure TTaschenrechner.hatKnopfKommaGeklickt(Sender: TObject);
begin
hatTextfeldDisplay.setzeInhalt (FloatToStr (HatTextfeldDisplay.inhaltalszahl));
hatTextfeldDisplay.setzeInhalt (hatTextfeldDisplay.inhaltalstext+'.');
end;


Ein weiteres mal danke für eure Hilfe :) Hätte nicht so schnelle Antworten erwartet!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home