Rundungsfehler ?

Anfängerfragen zum Programmieren mit PureBasic.
Langstein
Beiträge: 13
Registriert: 25.09.2008 18:29

Rundungsfehler ?

Beitrag 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
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag 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).
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag 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.
!UD2
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten