Seite 1 von 1

Rundungsfehler ?

Verfasst: 28.11.2008 15:00
von Langstein
Hallo,
warum bekomme ich bei folgendem Programm:

Code: Alles auswählen

x.f = 33.3333
Debug x
y = Round(x*10,#PB_Round_Nearest)
Debug y
z.d = y/10
Debug z
als Antwort nicht 33.3, sondern 33.299999999999997

Kennt jemand einen Trick wie ich 33.3 zurückbekomme? Danke schonmal

Verfasst: 28.11.2008 15:07
von ZeHa
Das liegt an der Art und Weise, wie Floats und Doubles aufgebaut sind. Dazu am besten einfach mal Wikipedia konsultieren, da findest Du alle Infos.

"Tricks" gibts die folgenden:
- Keine Komma-, sondern einfach ganze Zahlen nehmen, aber höher aufgelöst, z.B. in Cent statt in Euro rechnen.
- Wenn's nur um die "korrekte" Anzeige geht, einfach StrF() verwenden, ich glaube der rundet dann korrekt die 33,299999 auf 33,3 auf (mußt Du mal ausprobieren, kann's grad selbst nicht nachprüfen).

Verfasst: 29.11.2008 00:45
von Froggerprogger
Yo, ein

Code: Alles auswählen

Debug StrF(z, 2)
an dein Beispiel angehängt liefert Ausgabe 33.30
Aber das betrifft nur die Darstellung, nicht hingegen das prinzipielle Problem, dass intern nicht 33.30, sondern 33,299999... gespeichert ist.

Verfasst: 29.11.2008 01:42
von mk-soft
Froggerprogger hat geschrieben:
Aber das betrifft nur die Darstellung, nicht hingegen das prinzipielle Problem, dass intern nicht 33.30, sondern 33,299999... gespeichert ist.
Das ist kein Problem, das ist halt so bei Gleitpunktzahlen.

Verfasst: 29.11.2008 01:51
von PMV
Dazu ist die PB-Hilfe "Variablen, Typen und Operationen" sehr Hilfreich
(ganz runter scrollen) Dort steht alles interessante ... .

100% genau sind nur Ganzzahlentypen ... . Z.B. ist es sinnvoller bei Geld
nicht in Euro, sondern in Cent zu arbeiten. Zur Ausgabe wäre dann ein

Code: Alles auswählen

Debug Round(Geld.l / 100, 2)
die Lösung.

@mk-soft
Probleme kann man immer "relativieren" ... bei Gleitpunktzahlen ist dieser
Umstand ein Problem, der bei Nutzung berücksichtigt werden sollte.
:D

MFG PMV