![]() |
Rechnung behauptet: "" ist kein Float Wert
Hi Leute!
Hoffe bin im richtigen Forum dafür. Habe ein für mich unlösbares Problem, was an sich gar nicht so schwer aussieht. Hier erstmal der Code:
Delphi-Quellcode:
Sorry, dass er so lang ist (und Chaoslike), aber habe echt keine Ahnung, wo der Hund begraben liegt.
unit Unit4;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm4 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Edit4: TEdit; Label2: TLabel; Label3: TLabel; Label4: TLabel; Button1: TButton; Label5: TLabel; Panel1: TPanel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Timer1: TTimer; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form4: TForm4; dblErgeb2: double; implementation uses Prozentrechner, Math; {$R *.dfm} procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction); begin Form1.TrackBar1.Position:=0; end; procedure TForm4.Timer1Timer(Sender: TObject); begin if (Edit1.Enabled=False)xor(Edit2.Enabled=False)xor(Edit3.Enabled=False)xor(Edit4.Enabled=False) then Button1.enabled:=true else Button1.enabled:=false; if not(Edit1.Text='') and not(Edit2.Text='') and not(Edit3.Text='') then begin (Edit4.enabled:=false); (Edit4.color:=clScrollBar); end else begin (Edit4.enabled:=true); (Edit4.color:=clMenu); if not(Edit1.Text='') and not(Edit2.Text='') and not(Edit4.Text='') then begin (Edit3.enabled:=false); (Edit3.color:=clScrollBar); end else begin (Edit3.enabled:=true); (Edit3.color:=clMenu); if not(Edit2.Text='') and not(Edit3.Text='') and not(Edit4.Text='') then begin (Edit1.enabled:=false); (Edit1.color:=clScrollBar); end else begin (Edit1.enabled:=true); (Edit1.color:=clMenu); if not(Edit1.Text='') and not(Edit3.Text='') and not(Edit4.Text='') then begin (Edit2.enabled:=false); (Edit2.color:=clScrollBar); end else begin (Edit2.enabled:=true); (Edit2.color:=clMenu); end end end end end; procedure TForm4.Button1Click(Sender: TObject); var q: double; begin q:=1+(StrToFloat(Edit3.text)/100); if Edit1.Enabled=False then begin dblErgeb2:=StrToFloat(Edit2.Text)/(Power(q,StrToFloat(Edit4.text))); Label7.Caption:=FloatToStr(dblErgeb2); end; if Edit2.Enabled=False then begin dblErgeb2:=StrToFloat(Edit1.Text)*(Power(q,StrToFloat(Edit4.text))); Label7.Caption:=FloatToStr(dblErgeb2); end; if Edit3.Enabled=False then begin dblErgeb2:=Power((StrToFloat(Edit1.Text)*StrToFloat(Edit2.Text)),1/(StrToFloat(Edit4.Text))); Label7.Caption:=FloatToStr(dblErgeb2); end; if Edit4.Enabled=False then begin dblErgeb2:=(LN(StrToFloat(Edit2.Text))-(LN(StrToFloat(Edit1.Text))))/LN(q); Label7.Caption:=FloatToStr(dblErgeb2); end; end; end. Also, jetzt mal zum Kern des Problems: Die Form beinhaltet 4 Edits, mit denen gerechnet wird. 3 Werte kann man manuell eingeben, der Edit, der übrigbleibt, wird disabled. Man kann also, wenn man 3 Werte hat, den 4. ausrechnen lassen. Ist btw. ein Zinseszins Programm, dass Jahre, Startkapital, Endkapital und den Zinssatz errechnen kann (soll). 3 der Rechnungen funktionieren perfekt. Doch bei der Errechnung des Zinssatzes wird mir gesagt, dass "" kein float-Wert ist. Jetzt stellt sich die Frage, warum ich diese Message erhalte, den es wird ja nur mit wirklich eingegeben Werten gerechnet. Funktioniert übrigens auch nicht, wenn ich hier:
Delphi-Quellcode:
statt der recht komplexen Rechnung einfach 5*6 oder so etwas eingebe.
if Edit3.Enabled=False
then begin dblErgeb2:=Power((StrToFloat(Edit1.Text)*StrToFloat(Edit2.Text)),1/(StrToFloat(Edit4.Text))); Label7.Caption:=FloatToStr(dblErgeb2); end; Ich hoffe Ihr versteht was ich meine und könnt mir da vielleicht helfen. Wie Ihr sicherlich seht bin ich (immer)noch Anfänger. :) Greetz,D |
Re: Rechnung behauptet: "" ist kein Float Wert
Ich könnte jetzt sicherlich den Quelltext mühevoll anschauen, darin liegt aber nicht mein Hauptinteresse und wäre vergeudete Zeit.
Wenn Du meine Hinweise ein kleinwenig beachtest, sollte sich das Problem von selbst lösen. Also erstmal: SO wie Du programmiert man gar nicht, das ist ganz ganz unpraktisch. In Deinem kleinen Problem vielleicht noch nicht so deutlich ersichtlich, aber bei größeren Quelltexten wirst Du unweigerlich zum schlechten Programmierer Du unbrauchbaren und nicht mehr wiederverwendbaren Quelltext produzieren. Lege also für jedes Editfeld eine extra Variable an, und erst mit diesen fängst Du an mit rechnen. Wenn Du das Ergebnis berechnet hast, dann kannst Du dieses in einem Label oder sonstwo anzeigen lassen. Gruß stoxx |
Re: Rechnung behauptet: "" ist kein Float Wert
Keine Ahnung, was dein Quellcode eigentlich macht, aber die Exception bedeutet, dass irgend einem deiner StrToFloat ein leerer String übergeben wird (z.B. weil ins Editfeld nichts eingetragen wurde).
Bei deiner weiteren Fehlersuche ist dein erster Ansprechpartner der Debugger, die Tasten F5, F7 und F8. Dann findest du leicht raus, woran es liegt. |
Re: Rechnung behauptet: "" ist kein Float Wert
Außer dem Zwischenspeichern der Editwerte in passende Variablen ( am besten Extended), wie stoxx schon geschrieben würde ich statt StrToFloat VarStrToFloat verwenden. Aber auch keinen Fall würde ich Cast ungeprüft in einer Berechnung verwenden.
|
Re: Rechnung behauptet: "" ist kein Float Wert
Das kann nicht funktionieren.
In Deinem Button1Click berechnest Du die Variable "q" auf Basis von Edit3.Text. Edit3.Text kann aber leer sein, was vermutlich in Deinem Beispiel auch so sein wird. Ansonsten kann ich mich nur den anderen anschließen: Dein Programmierstil ist zum Abgewöhnen. Schau mal ![]() |
Re: Rechnung behauptet: "" ist kein Float Wert
Moin Hentai,
mir sind da auch ein paar Dinge aufgefallen ;-)
|
DP-Maintenance
Dieses Thema wurde von "Christian Seehase" von "Windows API / MS.NET Framework API" nach "Object-Pascal / Delphi-Language" verschoben.
Kein Problem mit der Windows-API |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:16 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