Am 02.02.10 08:50, schrieb Stefan Sicurella:
Hi,

also ich rechne seit Jahren in meiner App mit 4 Stellen hinter dem Komma und 
speichere diese Werte direkt als Double ab.
Das ging absolut problemlos, bis das jetzt mit dem kaufmännischen 
Runden-Problem bei sehr kleinen Beträgen unter 1 Euro auftrat... was aber ja 
auch zu lösen war.

Alles in Cent umrechnen reicht mir bei meiner Faktura auch nicht, denn hier 
werden 4 Stellen hinter dem Komma benötigt, in dem Fall müsste man alle 
Euro-Eingaben mal 10000 nehmen um einen 4Stellen hinter dem Komma Wert in eine 
Integerzahl zu wandeln.
Aber ehrlich gesagt sehe ich im Moment auch nicht genau, was mir das bringen 
soll, ich müsste schon alle Werte intern mit 100000 multiplizieren und mit 
diesen Werten dann auch rechnen,
sobald dann der Benutzer eine zahl angezeigt bekommt muss sie wieder geteilt 
und formatiert werden....

Nehmen wir als Beispiel doch mal deinen Code von gestern und schreiben das in Integer-Berechnung um:


  Dim i1, i2, i3, br, rabatt as Integer
  Const faktor = 10000

  rabatt = 45
  i1 = 16.5 * faktor 'i1 = 165000
  br = ( i1 / 100 ) * rabatt 'br = 74250
  i1 = i1 - br 'i1 = 90750
  i2 = i1 / ( 1.1 ) 'i2 = 82500
  i3 = i1 - i2 'i3 = 8250


Jetzt hätten wir bei (8250 / 10000) wieder das übliche Ergebnis von 0,8250. Aber:

MsgBox format( i3 / faktor, ",###.00" ) '0,82

Ergibt weiterhin die angezeigte 0,82, weil (i3 / faktor) als Fließkommazahl identisch umgewandelt wird. Wo liegt also der Vorteil in der vorhergehenden Integer-Berechnung? Beim Berechnen mit i3 als Double erhält man als Ergebnis "0.8250000000000011" wie Andy bereits treffend bemerkt hatte. Je mehr Werte man also zur Berechnung hat, umso ungenauer wird das Resultat bzw. irgendwann unterscheiden sich Centbeträge.

Mich würde allerdings noch interessieren wie man das Problem am Schluss mit der Darstellung behebt, ohne die Integer-Werte in Fließkomma umwandeln zu müssen. Schliesslich müsste nur das Komma an die richtige Stelle gesetzt werden, da der Faktor bekannt ist.

--
Michael Kagerbauer
http://rbcoder.de

Antwort per Email an