Autor Beitrag
GiuStyler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 65
Erhaltene Danke: 1

Win 8.1
Delphi XE6
BeitragVerfasst: Mi 17.09.14 11:07 
Hallo Leute,

nachdem ich zuletzt an meinem Taschenrechner gearbeitet habe, was aktuell noch nicht fertig ist, aber ich immer noch auf meinem Hauptchef warten muss der auf Geschäftsreise ist, hat mir mein anderer Chef eine Neue Aufgabe gegeben und zwar.

Ich soll ein Programm schreiben, wo ich ein Betrag eingebe und nach drücken von OK, soll die Anzahl der Münzen erscheinen. Zusätzlich habe ich noch hinzugefügt das ich angezeigt bekommen wie oft welchen Wert benutzt wurde.

Problem ist nun bei 0.01 macht er mir manchmal Probleme, da meine Zahl Real ist und am Ende statt 0,01 meistens 0,00999999 steht.

wie kann ich das nun Runden? habe schon versucht mit RountTo eine eigene function etc. irgendwie kriege ich es nicht hin. Kann mir einer sagen was ich genau machen muss?

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
procedure TFormGeldbetragumwandler.BitBtnOKClick(Sender: TObject);
var
  B : real;
  M: Integer;

  Münzen : array[1..8of Integer;
begin
  B := StrToFloat(EditEingabe.Text);
  M := 0;

  Münzen[1] := 0;
  Münzen[2] := 0;
  Münzen[3] := 0;
  Münzen[4] := 0;
  Münzen[5] := 0;
  Münzen[6] := 0;
  Münzen[7] := 0;
  Münzen[8] := 0;

  while B >= 2 do
    begin
      M := M+1;
      B := B-2;
      Münzen[1] := Münzen[1]+1;
    end;

   .
   .
   .

  while B >= 0.01 do
    begin
      M := M+1;
      B := (B-0.01);
      Münzen[8] := Münzen[8]+1;
    end;

  LabelAusgabe.Caption := 'Es sind insgesamt '+FloatToStr(M)+' Münzen enthalten';
  LabelAusgabe2.Caption :='Folgende Münzenvarianten sind vorhanden:'+#13+IntToStr(Münzen[1])+' * 2 €' ... +#13+IntToStr(Münzen[8])+' * 0,01 €';


Danke für jede Hilfe.

MfG
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Mi 17.09.14 11:39 
Das sind ganz normale Rundungsungenauigkeiten. An Deiner Stelle würde ich entweder den Datentyp Currency verwenden oder einfach intern in Cent umrechnen, dann kannst Du mit ganzen Zahlen hantieren.
GiuStyler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 65
Erhaltene Danke: 1

Win 8.1
Delphi XE6
BeitragVerfasst: Mi 17.09.14 12:02 
Danke.

Habs aber nun anders erledigt. Hatte es vorher schon fast richtig

Ich hatte nur eine Kleinigkeit vergessen. Mein Chef hat mich nun drauf hingeweisen

Ich hatte es so

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
begin
  M := M+1;
  RoundTo((B-Münzwert[1]), -2);
  Münzen[1] := Münzen[1]+1;
  end;


aber es sollte so sein

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
begin
  M := M+1;
  B := RoundTo((B-Münzwert[1]), -2);
  Münzen[1] := Münzen[1]+1;
end;
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mi 17.09.14 12:23 
user profile iconGiuStyler hat folgendes geschrieben Zum zitierten Posting springen:

Habs aber nun anders erledigt. Hatte es vorher schon fast richtig

Ich hatte nur eine Kleinigkeit vergessen. Mein Chef hat mich nun drauf hingeweisen

Ich hatte es so


Das hat aber nichts damit zu tun, dass Du bei real Ungenauigkeiten hast. Von daher ist wirklich die Verwendung von Currency oder die Umrechnung in Cent wichtig.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
GiuStyler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 65
Erhaltene Danke: 1

Win 8.1
Delphi XE6
BeitragVerfasst: Mi 17.09.14 16:26 
Hi Nersgatt,

Laut Debugger, funktioniert es. Es wird richtig gerundet.

Habe aber nun ein anderes Problem mit meinem Programm.

Das programm ist ja ein Geldbetragumwandler, dass heißt, ich gebe einen Betrag an Beispiel 10,37 und das Programm errechnet mri die die niederigsten Münzenausgabe. Soweit so gut es klappt alles.

Nun habe ich ein Zusätzliches Fenster zu Beginn hinzugefügt, dass ich manuell selber Münzwerte definiere, sofern diese maximal 8 sind wie in Deutschland mit 8 Münzen.

Das sind die Standardwerte die immer gelten.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  Münzwert[1] := 2.00;
  Münzwert[2] := 1.00;
  Münzwert[3] := 0.50;
  Münzwert[4] := 0.20;
  Münzwert[5] := 0.10;
  Münzwert[6] := 0.05;
  Münzwert[7] := 0.02;
  Münzwert[8] := 0.01;


Im Zusatzfenster sind diese ebenso schon vordefiniert. Nun zum Problem.

Wie kann ich es nun machen, dass ich die eingegebenen Werte im anderen Programm für diese eine Sitzung intern speichere? Wie bekomme ich die selbstdefinierten Werte durch den OK klick rüber? Und welche Funktion muss ich ausführen, damit er dann die eingetragenen Werte auf auf der anderen Seite übergibt.

Die andere Seite heißt aHaupt und die class ist TFormGeldbetragumwandler

Hoffe man versteht was ich meine.

Edit:

Der Code sieht nun so aus und es klappt auch laut meinem Chef :-)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  Münzwert[1] := StrToFloat(bWerte.FormWerte.EditWert1.Text);
  Münzwert[2] := StrToFloat(bWerte.FormWerte.EditWert2.Text);
  Münzwert[3] := StrToFloat(bWerte.FormWerte.EditWert3.Text);
  Münzwert[4] := StrToFloat(bWerte.FormWerte.EditWert4.Text);
  Münzwert[5] := StrToFloat(bWerte.FormWerte.EditWert5.Text);
  Münzwert[6] := StrToFloat(bWerte.FormWerte.EditWert6.Text);
  Münzwert[7] := StrToFloat(bWerte.FormWerte.EditWert7.Text);
  Münzwert[8] := StrToFloat(bWerte.FormWerte.EditWert8.Text);


Was nun noch fehlt ist das mit dem Ok. Wie kriege ich nun die Neuen Werte rüber?? Also welchen Befehl muss ich da eintragen?
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 17.09.14 23:38 
Moin!

Bitte erstelle für deine neue Frage ein separates Topic, da die Diskussion mehrerer Fragen in einem Topic für gewöhnlich für Verwirrung und Durcheinander sorgt. :idea: Danke! ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.