komme nicht weiter 'invalid float'

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
donsongking
Beiträge: 1
Registriert: Mo 21. Mär 2016, 12:04

komme nicht weiter 'invalid float'

Beitrag von donsongking »

Hallo,
ich muss für die Schule ein eigen gewähltes Programm erstellen, ich habe eeine Registrikasse gewählt.
es funktioniert auch eig alles so weit, jedoch kommt eine Fehlermeldung.

zum Verständniss:
ich möchte das der gesamtpreis ausgegeben wird jedoch kommt folgende Fehlermeldung
edtgesamtpreis is an invalid float

Quelltext

Code: Alles auswählen

procedure TForm1.btnsummeClick(Sender: TObject);
Var
 anzahl,i,a:integer;
 summe,mws,preis,gesamtpreis:double;
 rechnung:textfile;
Mit,Warengruppe,Ware,Anzahle,Summel,zeile,zahl,zahl11,zahl12,zahl13,zahl14,zahl21,zahl22,zahl23,zahl24,zahl31,zahl32,zahl33,zahl34,zahl41,zahl42,zahl43,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15:string;
begin
b1:= 'Puderzucker';
b2:= 'WZimt/WZucker';
b3:= 'Schlagcremé';
b4:= 'Apfelmus';
b5:= 'Zimt/Zucker';
b6:= 'Schoko';
b7:= 'Schoko/Banane';
b8:= 'Schinken/Käse';
b9:= 'Kaffee';
b10:='Tee';
b11:='Cappucion';
b12:='Kakao';
b13:='Mandeln';
b14:='Mix';
b15:='Cashewkerne';
 zahl11:=edtware.text;
 if zahl11='11' then lbxware.items.add(b1);
 zahl12:=edtware.text;
  if zahl12='12' then lbxware.items.add(b2);
 zahl13:=edtware.text;
  if zahl13='13' then lbxware.items.add(b3);
 zahl14:=edtware.text;
  if zahl14='14' then lbxware.items.add(b4);
 zahl21:=edtware.text;
  if zahl21='21' then lbxware.items.add(b5);
 zahl22:=edtware.text;
  if zahl22='22' then lbxware.items.add(b6);
 zahl23:=edtware.text;
  if zahl23='23' then lbxware.items.add(b7);
 zahl24:=edtware.text;
  if zahl24='24' then lbxware.items.add(b8);
 zahl31:=edtware.text;
  if zahl31='31' then lbxware.items.add(b9);
 zahl32:=edtware.text;
  if zahl32='32' then lbxware.items.add(b10);
 zahl33:=edtware.text;
  if zahl33='33' then lbxware.items.add(b11);
 zahl34:=edtware.text;
  if zahl34='34' then lbxware.items.add(b12);
 zahl41:=edtware.text;
  if zahl41='41' then lbxware.items.add(b13);
 zahl42:=edtware.text;
  if zahl42='42' then lbxware.items.add(b14);
 zahl43:=edtware.text;
  if zahl43='43' then lbxware.items.add(b15);
  anzahl:=strtoint(edtanzahl.text);
 lbxanzahl.items.add(inttostr (anzahl));
  a:= lbxware.count -1 ;
  gesamtpreis:= strtofloat(edtgesamtpreis.text);
 
 
 
  for i:= 0 to a do begin
  zeile:= lbxware.items[i];
 
 
  if Zeile = b1 then preis:= 2.70
  else if zeile= b2 then preis:= 2.70
  else if zeile= b3 then preis:= 3.00
  else if zeile= b4 then preis:= 3.00
  else if zeile= b5 then preis:= 2.00
  else if zeile= b6 then preis:= 2.50
  else if zeile= b7 then preis:= 3.00
  else if zeile= b8 then preis:= 3.50
  else if zeile= b9 then preis:= 3.50
  else if zeile= b10 then preis:= 1.00
  else if zeile= b11 then preis:= 1.00
  else if zeile= b12 then preis:= 1.00
  else if zeile= b13 then preis:= 3.00
  else if zeile= b14 then preis:= 3.00
  else if zeile= b15 then preis:= 3.00 ;
  end;
  summe:= anzahl * preis ;
 
  gesamtpreis:=gesamtpreis + summe ;
  edtgesamtpreis.text:= floattostr(gesamtpreis);
  lbxsumme.items.add(floattostr(summe));
  mws:= gesamtpreis *0.19 ;
  edtmehrwert.text:= floattostr(mws);
 
  assignfile(rechnung,'rechnung.txt');
  {$I-}
  rewrite(rechnung);
  {$I+}
  a:= lbxanzahl.count -1 ;
  for i:= 0 to a do begin
  Mit:= lbxmitarbeiter.items[0];
  Warengruppe:= lbxwarengruppe.items[i];
  Ware:=lbxware.items[i];
  Anzahle:=lbxanzahl.items[i];
  Summel:=lbxsumme.items[i];
  zeile:= Mit +'#'+Warengruppe+'#'+Ware+'#'+Anzahle+'#'+Summel+'#'+ edtgesamtpreis.text +'#'+ edtmehrwert.text;
  writeln(rechnung,zeile);
  end;
  closefile(rechnung);
end;                                                       
 


wenn mir jemand dabei helfen könnte, wäre ich sehr dankbar, hängt ne wichtige Note dran
vielen Dank schon mal
Zuletzt geändert von Lori am Mo 4. Apr 2016, 19:59, insgesamt 1-mal geändert.
Grund: Highlighter

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: komme nicht weiter 'invalid float'

Beitrag von wp_xyz »

Wenn du vor deinen Quelltext ein [ code=laz] und danach ein [ /code] setzt (jeweils ohne das Leerzeichen nach der eckigen Klammer, das ich hier benötige, damit die Forumssoftware damit klarkommt), dann wird dein Code augenfreundlicher formatiert und mit Zeilennummern versehen, und man kommt damit leichter klar. Auch wäre es hilfreich, wenn du sagen würdest, wo genau der Fehler auftritt. Damit wird es wieder die übliche Raterei...

Falls der Fehler in der Zeile "gesamtpreis:= strtofloat(edtgesamtpreis.text)" auftritt, denke ich, dass das Eingabefeld an dieser Stelle leer ist, und ein Leerstring kann nicht in eine Zahl umgewandelt werden. Zumindest habe keine Anweisungen gesehen, die vorher etwas in das Edit reinschreiben.

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: komme nicht weiter 'invalid float'

Beitrag von marcov »

Wenn Zeile nicht B1 bis B15 ist, was ist denn der Preis ? Nicht initialisiert also, "invalid"

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: komme nicht weiter 'invalid float'

Beitrag von mschnell »

AFAIK kann fpc case mit String.

Dann brauchst Du nicht die vielen "else if" und eine "else" Zeile deckt diesen fall ab .

-Michael

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: komme nicht weiter 'invalid float'

Beitrag von Mathias »

Die Zahl und das b könnte man auch in ein Array packen.
Die würde das Ganze auch ein bisschen übersichtlicher machen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten