Autor |
Beitrag |
mick
      
Beiträge: 159
|
Verfasst: Mo 22.09.08 23:06
salve, experten!
prolog:
ich habe hier ein (womoeglich einigen bekanntes, fuer mich ber kniffliges) problem mit delphi vorliegen, das ich nicht in den griff bekomme.
kontext:
theoretische informatik, simulation eines einfachen getraenkeautomaten (endlicher automat), den man mit muenzen fuettern kann, um ein getraenk zu bekommen (siehe datei im anhang).
problem:
im code stimmt alles. doch wenn ich 0,80 cent drin habe und ein wasser mag, bekomme ich keines.
annahme:
es scheint im speziellen an den 0,20-cent-schritten zu liegen, das problem tritt nur da auf. womoeglich liegt es an der binaerdarstellung des wertes. demnach ein rundungsfehler?!
erste loesungsidee:
hm, gedacht, getan und round sowie roundto eingesetzt (z.b. "RoundTo(Geldbetrag,1) >= RoundTo(Wasserpreis,1)"). doch entweder habe ich das falsch gemacht, oder es geht trotzdem nicht. kann dann naemlich getraenke "ziehen", ohne eine muenze eingeworfen zu haben...
frage:
wer weiss, woran es liegt und wie man es in den griff bekommt?
beste gruesse,
ciao,
mick.
Einloggen, um Attachments anzusehen!
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 22.09.08 23:15
bei foats darf man nie auf gleichheit abfragen, sondern muss auf eine gewisse genauigkeit (epsilon) prüfen. das ist auch schon der ganze trick dabei.
|
|
Jann1k
      
Beiträge: 866
Erhaltene Danke: 43
Win 7
TurboDelphi, Visual Studio 2010
|
Verfasst: Mo 22.09.08 23:21
Du kannst auch einfach mit integern arbeiten und dann alles in Cent rechnen
|
|
mick 
      
Beiträge: 159
|
Verfasst: Di 23.09.08 06:58
danke fuer die antworten.
werde dann wohl in cent arbeiten.
dennoch nachfragen:
- ist das mit fliesskommawerten in anderen prog-sprachen auch so?
- gibt es keine moeglichkeit, das mit round hinzubekommen?
- was bedeutet der zusatz in klammern "epsilon"?
danke + gruss,
mick.
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 23.09.08 07:41
mick hat folgendes geschrieben: | dennoch nachfragen:
- (1) ist das mit fliesskommawerten in anderen prog-sprachen auch so?
- (2) gibt es keine moeglichkeit, das mit round hinzubekommen?
- (3) was bedeutet der zusatz in klammern "epsilon"? |
Dachte die Erklärung wäre ausreichend, für jemanden der Theoretische-Informatik Studiert. Daher knapp die zugehörigen Antworten.
- Ja in allen, hängt vom Zahlentyp ab
- Nein, da Round (Fliesskomma) wieder Fliesskomma ergibt
- ist die Genauigkeit mit der man vergleichen möchte (if abs(a-b)<E then gleich)
<HTH> GG
Edit: sieh dir zu (3) auch mal die unit Math an, hier findest du die compare funktionen, bei welchen du nur Epsilon mit anzugeben brauchst.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 23.09.08 10:16
Es gibt einen Datentyp Currency, der für Währungsbeträge am besten geeignet ist.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 23.09.08 12:10
BenBE hat folgendes geschrieben: | Es gibt einen Datentyp Currency, der für Währungsbeträge am besten geeignet ist. |
der ist nicht schlecht, ist ja ein integer  . daneben gibts noch die klassische möglichkeit mit BCD zahlen.
|
|
mick 
      
Beiträge: 159
|
Verfasst: Di 23.09.08 15:50
lieber grenzgaenger,
danke fuer deine neuerliche antwort, hast mir geholfen.
den kleinen seitenhieb in deiner antwort werde ich daher auch schlichtweg mal ignorieren. habe kein schlechtes gewissen ob meiner womoeglich naiven nachfrage.
lieber benbe,
der tipp mit Currency ist sehr interessant, habe mich nach aktuellem stand dafuer entschieden.
danke zusammen,
ciao,
mick.
|
|
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 23.09.08 16:17
Es heißt "Salvete".Es ist nun mal Plural... 
|
|
mick 
      
Beiträge: 159
|
Verfasst: Di 23.09.08 17:35
klugmann macht seinem namen alle ehre...
danke fuer den hinweis an den nicht-lateiner,
ciao,
mick.
|
|
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 23.09.08 18:20
Hab viel von meinen Vorfahren geerbt... 
|
|