![]() |
Fehler bei Dateneingabe
Hallo. Ich habe ein folgendes Problem. Schreibe gerade ein Programm. Der Queltext für den Button sieht so aus:
Delphi-Quellcode:
Wenn ich jetzt das Programm starte funktioniert es eigentlich. Aber es sind kleine Fehler. Wenn ich keine Daten in den Edit-Feldern habe und dann den Button anklicke kommt immer eine Fehlermeldung. Ebenfalls muss ich die Zahlen duch Komma schreiben. Also z.B. 1,2 bei 1.2 kommt ebenfalls eine Fehlermeldung. Was kann ich da jetzt machen?
procedure TForm1.Button1Click(Sender: TObject);
var aktpreis, ver100ben, jahrkm, ausgabevbj, ausgabebkj : real; begin aktpreis := StrToFloat(Edit6.Text); ver100ben := StrToFloat(Edit3.Text); jahrkm := StrToFloat(Edit4.Text); ausgabevbj := VerbrauchBenzinJahr(ver100ben, jahrkm); ausgabebkj := BenzinkostenJahr(aktpreis, ausgabevbj); Panel1.Caption := FloatToStr(ausgabevbj); Panel4.Caption := FloatToStr(ausgabebkj); end; |
AW: Fehler bei Dateneingabe
Schließe Delphi-Code bitte künfig in Delphi-Tags ein. Und Du könntest Dir
![]() ![]() |
AW: Fehler bei Dateneingabe
Try... wurde ja schon genannt.
Und in Deutschland werden Dezimalbrüche nuneinmal mit , geschrieben. Wenn Du hierfür den Punkt nutzen willst, dann solltest du Deinem Rechner klarmachen, das er in den USA steht. Dann ist aber auch das Datumsformat ein anderes. Du könntest aber auch gleich das Format der Eingabe überprüfen und das richtige Format an Dein Programm weiter reichen. Gruß K-H |
AW: Fehler bei Dateneingabe
Beide genannten Funktionen sind überladen, so dass man auch das Format übergeben kann.
|
AW: Fehler bei Dateneingabe
Hallo. Ok ich habe es jetzt so gemacht:
Code:
Es kommt aber die folgende Fehlermeldung:
var aktpreis, ver100ben, jahrkm, ausgabevbj, ausgabebkj : real;
begin aktpreis := tryStrToFloat(Edit6.Text); There is no overloaded version of 'TryStrToFloat' that can be called with these arguments. Muss ich TryStrToFloat irgendwo definieren? Sorry aber programmieren ist nicht meine Stärke. Ich mache es nur für die Schule. |
AW: Fehler bei Dateneingabe
Dann schau dir mal an, wie die Funktion deklariert ist
![]() |
AW: Fehler bei Dateneingabe
Und gib bitte deinen Komponenten aussagekräftige Namen. Mit Edit1-6 wirst du in 1-2 Wochen nichts mehr anfangen können oder du schaust jedes mal nach, wie das Feld heißt.
Bernhard |
AW: Fehler bei Dateneingabe
Sprich ich muss diese SysUtils in den Queltext implemetieren?
|
AW: Fehler bei Dateneingabe
Nein, nur Einbinden und dann miut den richtigen Parametern und Rückgabewert aufrufen.
|
AW: Fehler bei Dateneingabe
Ok. Habe es so gelöst
Code:
Funktioniert auf jeden Fall.
procedure TForm1.Button1Click(Sender: TObject);
var aktpreis, ver100ben, jahrkm, ausgabevbj, ausgabebkj : double; begin if TryStrToFloat(Edit6.Text,aktpreis) then begin //ShowMessage('Ungültige Eingabe'); aktpreis := StrToFloat(Edit6.Text); end else begin ShowMessage('HAHA'); end; //aktpreis := StrToFloat(Edit6.Text); ver100ben := StrToFloat(Edit3.Text); jahrkm := StrToFloat(Edit4.Text); ausgabevbj := VerbrauchBenzinJahr(ver100ben, jahrkm); ausgabebkj := BenzinkostenJahr(aktpreis, ausgabevbj); Panel1.Caption := FloatToStr(ausgabevbj); Panel4.Caption := FloatToStr(ausgabebkj); end; Könnt Ihr mir bitte noch erklären wie das gemeint war, dass ich Dezimalzahlen auch mit Punkt schreiben kann. Also das beides funktioniert sowohl , als auch . ? |
AW: Fehler bei Dateneingabe
Zitat:
Zitat:
|
AW: Fehler bei Dateneingabe
und wie?
|
AW: Fehler bei Dateneingabe
Wie wäre es mit
![]() |
AW: Fehler bei Dateneingabe
Geht nicht, da die Variablen vom Datentyp double sind und wenn ich diese in ein String umwandele, funktioniert das ganze Programm nicht mehr.
|
AW: Fehler bei Dateneingabe
Vor der Wandlung
Delphi-Quellcode:
if TryStrToFloat(StringReplace(Edit6.Text, '.', ',', []),aktpreis) then
|
AW: Fehler bei Dateneingabe
Das habe ich ja probiert. Funktioniert nicht. Kommt folgende Fehlermeldung: 1.51 Is not a valid floating point value
|
AW: Fehler bei Dateneingabe
:? Es dürfte ja kein Punkz mehr drin sein, oder gibst du mehrere ein?
|
AW: Fehler bei Dateneingabe
eingentlich nicht. Mal so eine Idee:
Ich kann ja mit decimalseparator := '.'; den Punkt festlegen kann ich auch schreiben punkt oder komma? also z.b. so: decimalseparator := '.' or ','; |
AW: Fehler bei Dateneingabe
Nein. Ein weiteres Problem könnte aber sein, dass auch Tausendertrenner verwendet werden.
|
AW: Fehler bei Dateneingabe
Hier bis jetzt das gesamte Programm:
Code:
Sorry, wenn ich euch nerve. Aber diese Hausaufgabe muss ich morgen abgeben :shock:
function VerbrauchBenzinJahr(ver100ben, jahrkm : double): double;
begin result := ver100ben * jahrkm / 100; end; function BenzinkostenJahr(aktpreis, ausgabevbj : double): double; begin result := aktpreis * ausgabevbj; end; procedure TForm1.Button1Click(Sender: TObject); var aktpreis, ver100ben, jahrkm, ausgabevbj, ausgabebkj : double; begin decimalseparator := '.'; if TryStrToFloat(Edit6.Text,aktpreis) and TryStrToFloat(Edit3.Text,ver100ben) and TryStrToFloat(Edit4.Text,jahrkm) then begin aktpreis := StrToFloat(Edit6.Text); ver100ben := StrToFloat(Edit3.Text); jahrkm := StrToFloat(Edit4.Text); end else begin ShowMessage('Bitte Zahlen zur Eingabe verwenden!'); end; ausgabevbj := VerbrauchBenzinJahr(ver100ben, jahrkm); ausgabebkj := BenzinkostenJahr(aktpreis, ausgabevbj); Panel1.Caption := FloatToStr(ausgabevbj); Panel4.Caption := FloatToStr(ausgabebkj); end; end. |
AW: Fehler bei Dateneingabe
Wie gesagt sind diese Zeilen unnötig!
Delphi-Quellcode:
aktpreis := StrToFloat(Edit6.Text);
ver100ben := StrToFloat(Edit3.Text); jahrkm := StrToFloat(Edit4.Text); |
AW: Fehler bei Dateneingabe
Außerdem fände ich es nicht ratsam, an den globalen Einstellungen deiner Anwendung rumzuspielen. Die holt sich Delphi vom System. Wenn dir was nicht passt, kannst du immernoch ein TFormatSettings definieren, dem du dann sagst, dass das Tausendertrennzeichen ein Komma ist und das Dezimalzeichen ein Punkt ist.
Bernhard |
AW: Fehler bei Dateneingabe
Wo finde ich diese TFormat.Settings? Außerdem will ich doch, dass beide Varianten laufen. Man soll die Eingabe sowohl mit . als auch mit , schreiben können.
|
AW: Fehler bei Dateneingabe
Der Typ heisst TFormatSettings und ein Parameter des Typs kann optional den Konvertierungsfunktionen übergeben werden.
Führe TryStrToFloat() doch geschachtelt aus. D.H. im Else der ersten Abfrage einfach die 2. |
AW: Fehler bei Dateneingabe
Hatte ich das nicht alles bereits erwähnt? :roll: Man müsste nur einmal die verlinkte Hilfe vollständig lesen.
|
AW: Fehler bei Dateneingabe
Wäre es möglich, dass jemand mir hier dieses hinschreibt? Ich komme nicht drauf, wie und was ich jetzt bei mir im Queltext ändern muss:(
|
AW: Fehler bei Dateneingabe
Einfach die Schritte durchführen, wie sie geschrieben wurden.
|
AW: Fehler bei Dateneingabe
Ohh man. Ich kapiere überhaupt nichts mehr. Welche Schritte? Ich habe es versucht mit StrinReplace dann mit diesem Decimalseparator und alles anderem. Es läuft nicht. Keine Ahnung ob ich vielleicht nur die Syntax falsch schreibe oder was auch immer.
Programmieren ist absolut nicht meine Stärke. Ich mache das nur, weil es in der Schule ein Unterricht dafür gibt. Ich glaube, nachdem dieses Halbjahr vorbei ist, wähle ich das Fach ab. |
AW: Fehler bei Dateneingabe
Erst mit , versuchen und wenn das fehlschlägt mit .
|
AW: Fehler bei Dateneingabe
Das ist ja nicht das Ziel der Aufgabe. Man soll sowohl die Eingabe mit , als mit . durchführen können.
|
AW: Fehler bei Dateneingabe
Ja genau das stllt diese Vorgehensweise doch sicher!
|
AW: Fehler bei Dateneingabe
Welche Vorgehenweise denn?
Egal, ich lass es sein. Gebe die Aufgabe so ab. Dann werden mir hoffentlich nur Punkte für Unvollständigkeit abgezogen. |
AW: Fehler bei Dateneingabe
Lies dir nocheinmal #24 und #29 durch
|
AW: Fehler bei Dateneingabe
Wie soll ich es machen? Wie lautet jetzt die Syntax?
|
AW: Fehler bei Dateneingabe
Du hast doch schon den ersten Teil. Mach einfach nocheinmal das selbe mitr dem anderen Trenner im else Zweig
|
AW: Fehler bei Dateneingabe
Wenn Sie es so meinen:
Code:
Das läuft nur bediengt. Ich kann zwar die Eingabe mit , und . machen. Aber: Umswitchen von , auf . geht immer. Wenn ich aber die Eingabe mit einem . mache und dann auf , umswitchen will--> kommt die Fehlermeldung.
procedure TForm1.Button1Click(Sender: TObject);
var aktpreis, ver100ben, jahrkm, ausgabevbj, ausgabebkj : double; begin if TryStrToFloat(Edit6.Text,aktpreis) and TryStrToFloat(Edit3.Text,ver100ben) and TryStrToFloat(Edit4.Text,jahrkm) then begin aktpreis := StrToFloat(Edit6.Text); ver100ben := StrToFloat(Edit3.Text); jahrkm := StrToFloat(Edit4.Text); end else decimalseparator := '.'; begin aktpreis := StrToFloat(Edit6.Text); ver100ben := StrToFloat(Edit3.Text); jahrkm := StrToFloat(Edit4.Text); end; |
AW: Fehler bei Dateneingabe
ich würde meinen, dass hier die Delphi-Tags besser angebracht wären :mrgreen:
dann sieht das so aus
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var aktpreis, ver100ben, jahrkm, ausgabevbj, ausgabebkj : double; begin if TryStrToFloat(Edit6.Text,aktpreis) and TryStrToFloat(Edit3.Text,ver100ben) and TryStrToFloat(Edit4.Text,jahrkm) then begin aktpreis := StrToFloat(Edit6.Text); ver100ben := StrToFloat(Edit3.Text); jahrkm := StrToFloat(Edit4.Text); end else decimalseparator := '.'; // <-- entweder unter das begin verschieben begin // <-- oder dieses begin und das end entfernen, denn die sonst zu nix gut :o) aktpreis := StrToFloat(Edit6.Text); ver100ben := StrToFloat(Edit3.Text); jahrkm := StrToFloat(Edit4.Text); end; |
AW: Fehler bei Dateneingabe
Und die extra StrToFloat() sind wie schön mehrmals erwähnt überflüssig. Das zum Thema richtig Lesen der Antworten!
|
AW: Fehler bei Dateneingabe
Das Problem bleibt immer noch bestehen.
|
AW: Fehler bei Dateneingabe
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var aktpreis, ver100ben, jahrkm, ausgabevbj, ausgabebkj : double; begin if not TryStrToFloat( StringReplace( Edit6.Text, '.', ',', [] ), aktpreis ) then begin Edit6.SetFocus; Exit; end; if not TryStrToFloat( StringReplace( Edit3.Text, '.', ',', [] ), ver100ben ) then begin Edit3.SetFocus; Exit; end; if not TryStrToFloat( StringReplace( Edit4.Text, '.', ',', [] ), jahrkm ) then begin Edit4.SetFocus; Exit; end; // Jetzt rechnen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz