Am 01.02.10 16:10, schrieb Andy Fuchs:
Das liegt in der Natur von Fliesskomma-Operationen. Damit hast Du letztlich
nur bewiesen, dass der Rundungsansatz von mir vorhin ein besseres Ergebnis
liefert :-)

Deine berechnete Zahl ist eben dabei nicht 0.825, sondern etwas mehr (oder
weniger)..., z.B.: 0.8250000000000011

Also müsstest Du :

i3=0.8250000000000011
MsgBox str(i3)+"  "+format(i3,",###.00")// ergibt 0.825 und 0,83

nehmen, oder aber wie vorhin schon ausgiebig vorgebetet, oder Du rechnest
mit Integern (was eigentlich ohnehin die schlauere Variante wäre).
a.

Was wäre denn die klügste Variante im Falle einer Buchhaltungsapplikation? Sämtliche Werte in Cent umrechnen und auch so in der Datenbank einspeichern?

Bisher habe ich immer entsprechende Funktionen für die Rundung genutzt, die Zahlen wären dabei vorher mit 4 Nachkomma-Stellen gespeichert:


Function RoundMct(value As Double, decimals As Integer) As Double
  Dim sign as Integer = Sign( value )

  value = Abs( value )
  value = value * Pow( 10, decimals )
  value = value + 0.5

  value = floor( value ) / Pow( 10, decimals )

  return sign * value

End Function


--
Michael Kagerbauer
http://rbcoder.de

Antwort per Email an