Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi 100 + 100 + 123,59 = 26??? (https://www.delphipraxis.net/8875-100-100-123-59-%3D-26-a.html)

TheMiller 14. Sep 2003 12:55


100 + 100 + 123,59 = 26???
 
Hey Leute,

ich bin am Verzweifeln.. Ich habe ein Programm, dass Euro Beträge in ein MemoFeld läd und bei Klick ausrechnet. Man kann jedoch Daten hinzufügen.

Wenn ich jetzt 100€, 100€ und 123,59€ buche, rechnet mir das Prgramm einen Betrag von 26€ zusammen.

Ich habe die Nacht schon mit Christian Seehase gesprochen, da mein Programm die letzte Zahl der Kommastelle zu dem Ergebnis vor dem Komma addiert. Er meinte, auf seinem Rechner geht das Prog einwandtfrei.

Auf meinen beiden allerdings NICHT.

Eins noch, was mich irritiert:
Ich habe 20 Konten angelegt und von Konto 1 - 9 können alle Werte eingegeben werden und es wird richtig ausgerechnet. Allerding von Konto 10 - 20 tritt der oben genannte Fehler auf, (100+100+123,59=26).

Ich habe aber überall den selben Code benutzt. Wie kann das sein?

hier der KOMPLETTE Code für die Rechnungen:

Delphi-Quellcode:
implementation

uses Unit1, Unit3;

{$R *.dfm}

var   i: integer; Ergebnis: extended;
var   i1: integer; Ergebnis2: extended;
var   i2: integer; Ergebnis3: extended;
var   i3: integer; Ergebnis4: extended;
var   i4: integer; Ergebnis5: extended;
var   i5: integer; Ergebnis6: extended;
var   i6: integer; Ergebnis7: extended;
var   i7: integer; Ergebnis8: extended;
var   i8: integer; Ergebnis9: extended;
var   i9: integer; Ergebnis10: extended;
var   i10: integer; Ergebnis11: extended;
var   i11: integer; Ergebnis12: extended;
var   i12: integer; Ergebnis13: extended;
var   i13: integer; Ergebnis14: extended;
var   i14: integer; Ergebnis15: extended;
var   i15: integer; Ergebnis16: extended;
var   i16: integer; Ergebnis17: extended;
var   i17: integer; Ergebnis18: extended;
var   i18: integer; Ergebnis19: extended;
var   i19: integer; Ergebnis20: extended;

.
.
.

procedure TForm4.Button21Click(Sender: TObject);
begin
  Ergebnis:=0;
  for i:=0 to Memo2.Lines.Count-1 do
  begin
    Ergebnis:=Ergebnis+StrToFloat(Memo2.Lines[i]);
  end;
  Edit41.text:=FloatToStr(Ergebnis);
end;

procedure TForm4.Button22Click(Sender: TObject);
begin
  Ergebnis2:=0;
  for i1:=0 to Memo3.Lines.Count-1 do
  begin
    Ergebnis2:=Ergebnis2+StrToFloat(Memo3.Lines[i1]);
  end;
  Edit42.text:=FloatToStr(Ergebnis2);

end;

procedure TForm4.Button23Click(Sender: TObject);
begin
  Ergebnis3:=0;
  for i2:=0 to Memo5.Lines.Count-1 do
  begin
    Ergebnis3:=Ergebnis3+StrToFloat(Memo5.Lines[i2]);
  end;
  Edit43.text:=FloatToStr(Ergebnis3);

end;

procedure TForm4.Button24Click(Sender: TObject);
begin
  Ergebnis4:=0;
  for i3:=0 to Memo7.Lines.Count-1 do
  begin
    Ergebnis4:=Ergebnis4+StrToFloat(Memo7.Lines[i3]);
  end;
  Edit44.text:=FloatToStr(Ergebnis4);

end;

procedure TForm4.Button25Click(Sender: TObject);
begin
  Ergebnis5:=0;
  for i4:=0 to Memo9.Lines.Count-1 do
  begin
    Ergebnis5:=Ergebnis5+StrToFloat(Memo9.Lines[i4]);
  end;
  Edit45.text:=FloatToStr(Ergebnis5);

end;

procedure TForm4.Button26Click(Sender: TObject);
begin
  Ergebnis6:=0;
  for i5:=0 to Memo11.Lines.Count-1 do
  begin
    Ergebnis6:=Ergebnis6+StrToFloat(Memo11.Lines[i5]);
  end;
  Edit46.text:=FloatToStr(Ergebnis6);

end;

procedure TForm4.Button27Click(Sender: TObject);
begin

  Ergebnis7:=0;
  for i6:=0 to Memo13.Lines.Count-1 do
  begin
    Ergebnis7:=Ergebnis7+StrToFloat(Memo13.Lines[i6]);
  end;
  Edit47.text:=FloatToStr(Ergebnis7);

end;

procedure TForm4.Button28Click(Sender: TObject);
begin

  Ergebnis8:=0;
  for i7:=0 to Memo15.Lines.Count-1 do
  begin
    Ergebnis8:=Ergebnis8+StrToFloat(Memo15.Lines[i7]);
  end;
  Edit48.text:=FloatToStr(Ergebnis8);

end;

procedure TForm4.Button29Click(Sender: TObject);
begin
  Ergebnis9:=0;
  for i8:=0 to Memo17.Lines.Count-1 do
  begin
    Ergebnis9:=Ergebnis9+StrToFloat(Memo17.Lines[i8]);
  end;
  Edit49.text:=FloatToStr(Ergebnis9);

end;

procedure TForm4.Button30Click(Sender: TObject);
begin
    Ergebnis10:=0;
  for i9:=0 to Memo19.Lines.Count-1 do
  begin
    Ergebnis10:=Ergebnis10+StrToFloat(Memo19.Lines[i9]);
  end;
  Edit50.text:=FloatToStr(Ergebnis10);

end;

procedure TForm4.Button31Click(Sender: TObject);
begin
    Ergebnis11:=0;
  for i10:=0 to Memo21.Lines.Count-1 do
  begin
    Ergebnis11:=Ergebnis11+StrToFloat(Memo21.Lines[i10]);
  end;
  Edit51.text:=FloatToStr(Ergebnis11);

end;

procedure TForm4.Button32Click(Sender: TObject);
begin
    Ergebnis12:=0;
  for i11:=0 to Memo23.Lines.Count-1 do
  begin
    Ergebnis12:=Ergebnis12+StrToFloat(Memo23.Lines[i11]);
  end;
  Edit52.text:=FloatToStr(Ergebnis12);

end;

procedure TForm4.Button33Click(Sender: TObject);
begin
    Ergebnis13:=0;
  for i12:=0 to Memo25.Lines.Count-1 do
  begin
    Ergebnis13:=Ergebnis13+StrToFloat(Memo25.Lines[i12]);
  end;
  Edit53.text:=FloatToStr(Ergebnis13);

end;

procedure TForm4.Button34Click(Sender: TObject);
begin
    Ergebnis14:=0;
  for i13:=0 to Memo27.Lines.Count-1 do
  begin
    Ergebnis14:=Ergebnis14+StrToFloat(Memo27.Lines[i13]);
  end;
  Edit54.text:=FloatToStr(Ergebnis14);

end;

procedure TForm4.Button35Click(Sender: TObject);
begin
    Ergebnis15:=0;
  for i14:=0 to Memo29.Lines.Count-1 do
  begin
    Ergebnis15:=Ergebnis15+StrToFloat(Memo29.Lines[i14]);
  end;
  Edit55.text:=FloatToStr(Ergebnis15);

end;

procedure TForm4.Button36Click(Sender: TObject);
begin
    Ergebnis16:=0;
  for i15:=0 to Memo31.Lines.Count-1 do
  begin
    Ergebnis16:=Ergebnis16+StrToFloat(Memo31.Lines[i15]);
  end;
  Edit56.text:=FloatToStr(Ergebnis16);

end;

procedure TForm4.Button37Click(Sender: TObject);
begin
    Ergebnis17:=0;
  for i16:=0 to Memo33.Lines.Count-1 do
  begin
    Ergebnis17:=Ergebnis17+StrToFloat(Memo33.Lines[i16]);
  end;
  Edit57.text:=FloatToStr(Ergebnis17);

end;

procedure TForm4.Button38Click(Sender: TObject);
begin
    Ergebnis18:=0;
  for i17:=0 to Memo35.Lines.Count-1 do
  begin
    Ergebnis18:=Ergebnis18+StrToFloat(Memo35.Lines[i17]);
  end;
  Edit58.text:=FloatToStr(Ergebnis18);

end;

procedure TForm4.Button39Click(Sender: TObject);
begin
      Ergebnis19:=0;
  for i18:=0 to Memo37.Lines.Count-1 do
  begin
    Ergebnis19:=Ergebnis19+StrToFloat(Memo37.Lines[i18]);
  end;
  Edit59.text:=FloatToStr(Ergebnis19);

end;

procedure TForm4.Button40Click(Sender: TObject);
begin
      Ergebnis20:=0;
  for i18:=0 to Memo39.Lines.Count-1 do
  begin
    Ergebnis20:=Ergebnis20+StrToFloat(Memo39.Lines[i18]);
  end;
  Edit59.text:=FloatToStr(Ergebnis20);

end;

end.
Bitte helft mir...

Dagon 14. Sep 2003 13:12

Re: 100 + 100 + 123,59 = 26???
 
Ich muss dich leider enttäuschen! Bei mir funktionierts auch! Vieleicht liegt es an der aktuellen Kommaeinstellnug des Betriebssystems (also ob , oder .)? Ich weiss sonst auch nichts.

TheMiller 14. Sep 2003 13:14

Re: 100 + 100 + 123,59 = 26???
 
Hm,
also ich habe winXP Prof und wenn in 100.98 eingebe, dann sagt er "100.98 ist keine gültige Gleitkommazahl" (Delphi 6 enterprise)

Es geht nur mit ","

Was mach ich jetzt?

Wenn's bei euch geht?? Ist der Code dann auch richtig?

Dagon 14. Sep 2003 13:21

Re: 100 + 100 + 123,59 = 26???
 
Ich habe herausgefunden, dass es an der Kommaeinstellung nicht liegen kann (bei mir geht es mit , und .).
Der Code sollte eigentlich stimmen.
Das ist wirklich ein merkwürdiges Problem! Ich werde noch weiter suchen und wenn ich etwas gefunden haben, schreibe ichs dir!

Illuminator-23-5 14. Sep 2003 13:23

Re: 100 + 100 + 123,59 = 26???
 
bei mir klappts auch einwandfrei, der code dürfte also schon stimmen, aber kleiner tipp:
du könntest dir um die ganten i1, i2, i3... Variablen-deklarationen zu sparen, eine lokale laufvariable in jeder prozedur zu definieren. Falls das nicht geht, kannst du schreiben: var i: array[0..19] of integer; dann wär das ganze auch ein bisschen übersichtlicher...

TheMiller 14. Sep 2003 13:28

Re: 100 + 100 + 123,59 = 26???
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke, aber Sorry, dmit kenne ich mich nicht so aus.

Hier mein Programm. Geht bitte im hauptmenü auf Kontoauszüge einsehen und bucht mal in ID01 und ID10

Überzeugt euch bitte selbst... (ich dreh gleich am Rad)

axelf98 14. Sep 2003 13:47

Re: 100 + 100 + 123,59 = 26???
 
Hmm.. bei 01 rechnet er richtig, bei 10 kommt bei 78 + 2 = 17 :shock:
Irgendwas stimmt da nicht! Wahrscheinlich hast du beim Kopieren eine Zahl nicht geändert... z.B. Listbox9 anstatt Listbox10...
So hab ich früher auch mal programmiert, da ist mir das auch passiert!
Ganz merkwürdige Fehler hatte ich da auch! Ich würde mich bei einem solchen Programm auf jeden Fall mit Arrays oder oder Klassen beschäftigen, das lohnt sich immer bei mehreren Sachen (zB Konten) und solche Fehler sind so gut wie ausgeschlossen.

Ach und nochwas: Wenn ich einen Kommabetrag eingebe stimmt gar nichts mehr! Egal bei welcher Nummer!
44.20 + 0.10 = 11 :!:

Dagon 14. Sep 2003 13:51

Re: 100 + 100 + 123,59 = 26???
 
Ich würde auch noch einmal den ganzen Code durchschauen, ob du nicht etwa zwei Memos vertauscht hast. denn das scheint der Fall zu sein!

TheMiller 14. Sep 2003 13:51

Re: 100 + 100 + 123,59 = 26???
 
Hi, könntest du den Code evtl. umschreiben? IChhabe mit Arryes keine Erfahrung... würde es auch als THX vermerken..

Wäre cool, wenn du das machen würdest. (musst aber nicht ;-) )

Aber falls doch Interesse besteht, schicke ich dir den Code...

axelf98 14. Sep 2003 14:00

Re: 100 + 100 + 123,59 = 26???
 
Schau dir mal den Code an, dann siehst du vielleicht, warum das nicht geht: Wenn im Memo1 steht "14.09.2003 12,22?" und du mit StrToFloat das in eine Zahl umwandelst.. Das kann nicht gehen, da dort mehr als eine Zahl vorkommt, und woher sollte der Compiler wissen welche?
Stattdessen nimmt der wohl dann alle. Du müsstest die Zahlen separat speichern, und dann (am Besten als Array) direkt zusammenrechnen.

-----------------


Und noch was:
Zählvariablen sollten immer nur in der Prozedur (lokal und nicht oben global deklariert werden!) Du hast ja i0 bis iXX, das brauchst du gar nicht:

Delphi-Quellcode:
procedure Button1Click;
var i : integer;
begin
for i := 0 to Memo3.Lines.Count-1 do ...
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 Uhr.
Seite 1 von 2  1 2      

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