Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Anfänger taschenrechner Kommata Problem
Neuling94 - Do 02.02.12 18:07
Titel: Anfänger taschenrechner Kommata Problem
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)
Delphi-Quelltext
1: 2: 3: 4:
| procedure TTaschenrechner.hatKnopfKommaGeklickt(Sender: TObject); begin hattextfeldDisplay.setzeInhalt (strtofloat(HatTextfeldDisplay.inhaltalstext+',')); end; |
(2)
Delphi-Quelltext
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!
jaenicke - 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...
Delphi-Quelltext
1:
| HatTextfeldDisplay.SetzeInhaltsText(HatTextfeldDisplay.InhaltsText + ','); |
oder (aber die Version ist fast schon zu einfach als dass sie da funktionieren wird...)
Delphi-Quelltext
1:
| HatTextfeldDisplay.InhaltsText := HatTextfeldDisplay.InhaltsText + ','; |
baka0815 - Do 02.02.12 19:15
Du hast dein Problem eigentlich schon richtig erkannt:
Neuling94 hat folgendes geschrieben : |
(2) Delphi-Quelltext 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.
Neuling94 - 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.
Delphi-Quelltext
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!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!