Autor Beitrag
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
1:
2:
3:
4:
procedure TTaschenrechner.hatKnopfKommaGeklickt(Sender: TObject);
begin
 hattextfeldDisplay.setzeInhalt (strtofloat(HatTextfeldDisplay.inhaltalstext+','));
end;

(2)
ausblenden 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!


Zuletzt bearbeitet von Neuling94 am Mo 06.02.12 15:35, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), 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
1:
HatTextfeldDisplay.SetzeInhaltsText(HatTextfeldDisplay.InhaltsText + ',');					
oder (aber die Version ist fast schon zu einfach als dass sie da funktionieren wird...)
ausblenden Delphi-Quelltext
1:
HatTextfeldDisplay.InhaltsText := HatTextfeldDisplay.InhaltsText + ',';					
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, 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
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 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
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!