const
werte: array[0..14] of word =
(50000, 20000, 10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1);
kw = 'Die Eingabe ist keine gültige Euro-Währung!';
nz = 'Es sind nur zwei Nachkommastellen erlaubt!';
ek = 'Es ist nur ein einziges Komma erlaubt!';
procedure TForm1.Button3Click(Sender: TObject);
var
x, p: integer;
zahl: double;
anz: word;
s: string;
begin
s := AnsiUpperCase(stringreplace(Edit1.Text, #32, '', [rfreplaceall]));
s := stringreplace(s, ThousandSeparator, '', [rfreplaceall]);
s := stringreplace(s, 'EURO', '', []);
s := stringreplace(s, 'EUR', '', []);
s := stringreplace(s, '€', '', []);
while ansilastchar(s) = '0' do delete(s, length(s), 1);
if ansilastchar(s) = ',' then delete(s, length(s), 1);
p := pos(DecimalSeparator, s);
if p <> LastDelimiter(DecimalSeparator, s) then begin
showmessage(ek);
exit;
end;
if (p < length(s) - 2) and (p <> 0) then begin
for x := p + 1 to length(s) do
if not (s[x] in ['0'..'9']) then begin
showmessage(kw);
exit;
end;
showmessage(nz);
exit;
end;
try
zahl := strtofloat(s);
except
showmessage(kw);
exit;
end;
Listbox1.items.clear;
Edit1.Text := formatfloat('#,##0.00 €', zahl);
zahl := zahl * 100;
for x := 0 to 8 do begin
anz := 0;
while zahl >= werte[x] do begin
inc(anz);
zahl := zahl - werte[x];
end;
if anz > 0 then
Listbox1.items.add(inttostr(anz) + ' x ' + inttostr(werte[x] div 100) + ' EUR');
end;
for x := 9 to 14 do begin
anz := 0;
while zahl >= werte[x] do begin
inc(anz);
zahl := zahl - werte[x];
end;
if anz > 0 then
Listbox1.items.add(inttostr(anz) + ' x ' + inttostr(werte[x]) + ' CENT');
end;
end;