AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Rechnung behauptet: "" ist kein Float Wert
Thema durchsuchen
Ansicht
Themen-Optionen

Rechnung behauptet: "" ist kein Float Wert

Ein Thema von HentaiD · begonnen am 30. Aug 2006 · letzter Beitrag vom 30. Aug 2006
Antwort Antwort
Benutzerbild von HentaiD
HentaiD

Registriert seit: 30. Jun 2003
Ort: Wuppertal
30 Beiträge
 
Delphi 7 Enterprise
 
#1

Rechnung behauptet: "" ist kein Float Wert

  Alt 30. Aug 2006, 02:13
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:
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.
Sorry, dass er so lang ist (und Chaoslike), aber habe echt keine Ahnung, wo der Hund begraben liegt.

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:
if Edit3.Enabled=False
then begin
dblErgeb2:=Power((StrToFloat(Edit1.Text)*StrToFloat(Edit2.Text)),1/(StrToFloat(Edit4.Text)));
Label7.Caption:=FloatToStr(dblErgeb2);
end;
statt der recht komplexen Rechnung einfach 5*6 oder so etwas eingebe.
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
Signaturen stinken!
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#2

Re: Rechnung behauptet: "" ist kein Float Wert

  Alt 30. Aug 2006, 02:24
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
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#3

Re: Rechnung behauptet: "" ist kein Float Wert

  Alt 30. Aug 2006, 03:34
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Rechnung behauptet: "" ist kein Float Wert

  Alt 30. Aug 2006, 06:24
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Rechnung behauptet: "" ist kein Float Wert

  Alt 30. Aug 2006, 08:07
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 bei DSDT nach, wie es besser geht.
Peter
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Rechnung behauptet: "" ist kein Float Wert

  Alt 30. Aug 2006, 16:10
Moin Hentai,

mir sind da auch ein paar Dinge aufgefallen
  1. ) Ich weiss ja nicht, auf welchen Wert das OnTimer-Event eingestellt ist, aber man sollte zu Beginn einer solchen Routine den Timer ab-, und am Ende wieder einschalten, damit das Event nicht während der Abarbeitung erneut ausgelöst werden kann, falls diese länger dauert, als das Intervall eingstellt ist.

    Delphi-Quellcode:
    // Eingeschlossen in einen try/finally-Block, damit die Aktivierung sichergestellt ist
    Begin
      Timer1.Enabled := false;
      try
        // Hier dann die eigentliche OnTimer-Routine
      finally
        Timer1.Enabeld := true;
      end;
    end;
  2. ) Man sollte boolsche Werte nie auf Gleichheit abfragen, da oft 0 als false und <> 0 als true angesehen wird. Bei = false kann einem da zwar normalerweise nichts passieren, aber eine Abfrage auf Gleichheit erhöht auch nicht gerade die Lesbarkeit
    Beispiel:
    Was ist lesbarer:
    Delphi-Quellcode:
    if DirectoryExists(....) then

    if DirectoryExists(....) = true then
  3. ) Du solltest Dir angewöhnen mit Einrückungen zu arbeiten, um die Lesbarkeit zu erhöhen.
  4. ) Bist Du Dir sicher, dass Du in der ersten if-Abfrage die Werte mit XOR verknüpfen willst? Was willst Du damit erreichen?
  5. ) So einen Block
    Delphi-Quellcode:
    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);
    würde ich anders schreiben (ist aber auch Geschmackssache):
    Delphi-Quellcode:
    Edit3.Enabled := not ((Edit1.Text <> '') and (Edit2.Text <> '') and (Edit4.Text <> ''));
    if not Edit3.Enabled then begin
      Edit3.Color := clScrollBar;
    end else begin
    //....
    Ich finde es übersichtlicher auf <> '' zu prüfen als auf not = ''.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
30. Aug 2006, 16:11
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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz