Guten Mittag, Delphianer,
ich denke ich hab hier etwas gefunden, über das nicht nur ich mir den Kopf zerbreche, aber ich möchte es verstehen, deshalb frag ich euch:
Vorarab: Ich wollte einen Münzgeldrechner schreiben (Quellcode ist unten), der einen Betrag, den man eingibt umwandelt in Münzgeld wechselt. Ziel dabei war es, so wenig wie möglich Münzen zu benutzen. Dies war die aufgabenstellung, nun kommt mein dazu passender code
Delphi-Quellcode:
procedure TForm1.edtEingabeChange(Sender: TObject);
var
EingegebeneZahl: Currency;
arGeld: array [0 .. 7] of Currency;
i: Integer;
zaehler: Integer;
begin
// Array Füllen
arGeld[0] := 2;
arGeld[1] := 1;
arGeld[2] := 0.50;
arGeld[3] := 0.20;
arGeld[4] := 0.10;
arGeld[5] := 0.05;
arGeld[6] := 0.02;
arGeld[7] := 0.01;
EingegebeneZahl := StrToFloat(edtEingabe.Text);
mmoLog.Lines.Add(FloatToStr(EingegebeneZahl));
for i := 0 to 7 do
begin
zaehler := 0;
repeat
if EingegebeneZahl < arGeld[i] then
begin
break;
end;
mmoLog.Lines.Add('Operation: '+FloatToStr(EingegebeneZahl)+' - '+FloatToStr(arGeld[i]));
EingegebeneZahl := EingegebeneZahl - arGeld[i];
mmoLog.Lines.Add(FloatToStr(EingegebeneZahl));
Inc(zaehler);
until arGeld[i] > EingegebeneZahl;
if arGeld[i] = 2 then
lbl2.Caption := IntToStr(zaehler);
if arGeld[i] = 1 then
lbl1.Caption := IntToStr(zaehler);
if arGeld[i] = 0.50 then
lbl050.Caption := IntToStr(zaehler);
if arGeld[i] = 0.20 then
lbl020.Caption := IntToStr(zaehler);
if arGeld[i] = 0.10 then
lbl010.Caption := IntToStr(zaehler);
if arGeld[i] = 0.05 then
lbl005.Caption := IntToStr(zaehler);
if arGeld[i] = 0.02 then
lbl002.Caption := IntToStr(zaehler);
if arGeld[i] = 0.01 then
lbl001.Caption := IntToStr(zaehler);
end;
end;
Dieser Code funktioniert, soweit ohne fehler!!
Ändert man jedoch den Datentyp von currency in double, single o.ä...Funkitioniert das Programm nicht mehr richtig!! (Als kleine veranschaulichung habe ich ein memo eingebaut, welches die aktion mitschreibt, die gerade durchgeführt wird). Es wird nach der Dritten bzw. 4 Berechnung alles ungenau, und es wird nicht mehr weiter berechnet.
Ich will wissen warum?!! warum ändert sich der wert von alleine/ wird ungenau...
Ich hoffe ein paar von euch können sich einen Reim darauf machen
LG
Paddy_VII
p.s: es geht nicht darum, ob der Code nun effizient ist, oder nicht
?