Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Ronny am 26.11.14 - 19:53:15
-
Hallo zusammen,
warum kommt bei der nachfolgenden Gleichung ein unterschiedliches Ergebnis:
Print 2.3/0.05, Int(2.3/0.05)
obwohl das Ergebnis doch in beiden Fällen gleich ist (sein sollte)
-
Es kommt bei Basic-Dialekten immer zur Verwirrung, wenn der links der Anweisung stehende Ausdruck zunächst impliziert, das der Datentyp auch rechts führend ist.
Ausweg: Weise Dein Rechenergebnis einem Variablentyp zu, der fdas auch verträgt (hier: Double). Wandle diesen dann um. Dann klappt es auch mit dem Nachbarn.
HTH,
Bernhard
-
Ich denke, dass gerade Double das Problem ist ...
Der richtige Datentyp ist Currency - auch wenn die Doku zu diesem Datentyp auf den 1. Blick etwas anderes suggeriert.
Ausprobieren:
Dim d As Double, c As Currency
d = 2.3
c = 2.3
Print 1, c / 0.05, Int(c / 0.05)
Print 2, d / 0.05, Int(d / 0.05)
Print 3, CCur(2.3) / CCur(0.05), Int(CCur(2.3) / CCur(0.05))
Print 4, 2.3@ / 0.05@, Int(2.3@ / 0.05@)
-Werner
-
quasi mein Lieblingsthema.
Wird wahrscheinlich damit zusammenhängen, dass sich Fließkommazahlen wie Double binär nicht darstellen lassen. Für diese Darstellung existieren Standards wie IEEE 754 (try google).
Grundsätzliches Problem ist, dass die Anzahl der Fließkommazahlen gegen unendlich tendiert, der Rechner aber einen endlichen Raum an Speicher bereitstellt, um sie darzustellen.
Warum unendlich?
Einfache Zahlenreihe: 0.1, 0.01, 0.001, 0.0001, 0.00001, ...
Du kannst mit Rundungsoperationen gegen die Ungenauigkeiten ansteuern. Besser ist oft die Nutzung von nennen wir es "Festkommazahlen". Hier gibst Du bei der Deklaration an, wie viele Zahlen hinter dem Komma berücksichtigt werden. Bei Currency in LotusScript ist das implizit, afaik Darstellung bis 3 Ziffern hinter dem Komma und implizit hält das 5 Ziffern hinter dem Komma. Java bietet BigDecimal an. In Relationalen Datenbanken gibts dafür Numeric.