Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Thorsten Kalweit am 26.02.07 - 10:07:53

Titel: Rundungsfehler
Beitrag von: Thorsten Kalweit am 26.02.07 - 10:07:53
Hallo zusammen,

in unserer Rechnungsdatenbnak habe ich einen Rundungsfehler festgestellt:

Formel für den Bruttobetrag:
nbetrag+(nbetrag * ust_s / 100)

Nettobetrag:
313,50

19% von 313,50 = 59,57, obige Formel ergibt aber 373,06 statt 373,07 (Felder sind numerisch mit 2 Nachkommastellen)

Wisst Ihr, welches Problem da besteht?
Titel: Re: Rundungsfehler
Beitrag von: flaite am 26.02.07 - 10:21:22
Hängt nicht mit Lotus Notes zusammen. Das gibts in jeder Programmiersprache, die mit Gleitkommazahlen (floating point numbers) zu tun hat.
Du kannst solltest dir das mal durchlesen:
http://docs.sun.com/source/806-3568/ncg_goldberg.html

Für mich beliebte: Alternativen zu floating point:
Der SQL Datentyp NUMERIC. Hier ist die Anzahl der Stellen hinter dem Komma fest definiert.
Die Java Klasse BigDecimal. Hier kann die Anzahl der Stellen hinter dem Komma sehr groß werden. Kann natürlich viel Speicher in Beschlag nehmen.
Titel: Re: Rundungsfehler
Beitrag von: flaite am 26.02.07 - 10:26:13

Du kannst solltest dir das mal durchlesen:
http://docs.sun.com/source/806-3568/ncg_goldberg.html

OOpsy. Das kapier ich selber nicht so ganz. Das ist einfacher verständlich: http://de.wikipedia.org/wiki/Gleitkommazahl
Titel: Re: Rundungsfehler
Beitrag von: Thorsten Kalweit am 26.02.07 - 10:46:07
öhhh... ich arbeite in der DB nicht mit Java.  ;)

Meines Erachtens hat es dann doch mit Notes zu tun, bzw. mit dem Handlig der Zahlenwerte.  :-:

Gibt es dazu einen einfachen Workaround?
Titel: Re: Rundungsfehler
Beitrag von: DerAndre am 26.02.07 - 11:00:30
Jo, den Faktor 100 oder größer, je nach belieben

Nettobetrag * 100 dann das Ergebnis wieder durch 100. Das sollte funktionieren.
Titel: Re: Rundungsfehler
Beitrag von: Axel am 26.02.07 - 12:42:19
Mit dem folgenden Workaround verhinderst du die Rundungsfehler:

Formel für den Bruttobetrag:
nbetrag+((nbetrag * ust_s / 100) + 0,005)



Axel
Titel: Re: Rundungsfehler
Beitrag von: DerAndre am 26.02.07 - 12:57:35
Joooo der Trick mit der 5!  :D
Alles nach der zweiten Stelle wird ja Abgeschnitten...
Titel: Re: Rundungsfehler
Beitrag von: flaite am 26.02.07 - 14:27:47
Das ist ein allgemeines Problem beim Rechnen mit Gleitkommazahlen. Das ist programmiersprachen-unabhängig.
Auch mit 100 multiplizieren, etc. löst das Problem nicht, sobald du anfängst zu dividieren.
Du kannst halt Dinge wie 1/3 binär schwer erfassen.
Titel: Re: Rundungsfehler
Beitrag von: DerAndre am 26.02.07 - 16:53:37
Ja, diese Rechendramen kenne ich zu genüge.
Was auch lustig ist, ist einen Betrag ausrechnen und diesen dann auf volle 10€ aufrunden...
Titel: Re: Rundungsfehler
Beitrag von: koehlerbv am 26.02.07 - 17:21:24
Was auch lustig ist, ist einen Betrag ausrechnen und diesen dann auf volle 10€ aufrunden...
Wieso?

Bernhard
Titel: Re: Rundungsfehler
Beitrag von: flaite am 26.02.07 - 17:51:54
Oft helfen aber gerade die sogenannten "Grundlagen" zu verstehen.
Hab nie Informatik studiert, aber es ist dann nach einigen Jahren "praktischer Arbeit" schon erstaunlich, wie viel sich z.B. von sowas in der realen Welt wiederfindet. Zum Bleistift hier: http://en.wikipedia.org/wiki/Data_structure
Gleitkommazahlen ist auch so ein Fall.
Man muß ja nicht jeden Tag Algorythmus Bücher wälzen, aber von Zeit zu Zeit mal zumindest an der Oberfläche der theoretischen Grundlagen zu kratzen find ich gar nicht so dumm. Das Relationale Datenbankmodell ist so ein anderes Thema mit interessanten theoretischen Verästelungen.