Domino 9 und frühere Versionen > ND6: Entwicklung

Rechen- oder Denkfehler Double

(1/1)

madmaxxx4:
Hallo Zusammen,

habe ein Vergleichsproblem, dass ich nicht verstehe:

   Dim pricea As Double
   Dim priceb As Double
   pricea = Ccur("79,99")
   priceb = Ccur("239,97")
   qant = Cint("3")
pricea = pricea * qant

   If Not pricea = priceb Then
      CheckCalcError = "Fehler vom Gateway: PRICE_DP ist nicht  PRICE * QUANTITY "
   End If

diese if Abfrage ist False!

Wenn ich jedoch schreibe:

   If Not Str(pricea) = Str(priceb) Then
      CheckCalcError = "Fehler vom Gateway: PRICE_DP ist nicht  PRICE * QUANTITY "
   End If

Bekomme ich true!

Diese Prüfung lauft sehr oft und bei quant = 1 geht auch die erste If Abfrage. Im Debugger sehen a und b gleich aus. Nur für Notes intern halt nicht.

Danke im Voraus!

koehlerbv:
Der Prozessor und Rechnen - eine endlose Geschichte. Darüber liegt dann nochmal eine Softwareschicht, was es nicht besser macht.
Und Du machst es der Software besonders schwer!

Dieser Code funktioniert - überleg mal, warum ...

--- Code: --- Dim pricea As Currency
Dim priceb As Currency
pricea = Ccur ("79,99")
priceb = Ccur ("239,97")
Dim qant As Integer
qant = Cint ("3")
pricea = pricea * qant

Msgbox Cstr (pricea) & Chr$ (10) & Cstr (priceb)

If pricea <> priceb Then
Msgbox "Fehler vom Gateway: PRICE_DP ist nicht  PRICE * QUANTITY "
End If

--- Ende Code ---

Double rechnet mit zu vielen Nachkommastellen für diese Aufgabe (und hier zudem falsch). Nimm niemals zu genaue Datentypen, wenn Du es nicht brauchst.
Double = Ccur (value) ist auch keine gute Idee. Bleibe immer bei einem Datentyp (dazu zählt auch Dein Cint) - Du sparst Dir damit eine Menge Ärger.

Und: VERWENDE OPTION DECLARE! Dein Code hat gleich zweimal bei mir gemeckert.

Bernhard

PS: Nimm mal Deinen gegenwärtigen Code und füge eine Messagebox Cstr (pricea - priceb) an - dann siehst Du den Unterschied bzw. den Rechen-/Rundungsfehler in der bisherigen Variante.

madmaxxx4:
Hallo Bernhard,

danke für die Ausführungen. Ich wusste zwar dass double mit sehr vielen
Stellen rechnert, aber nicht dass die CPU sowas draus macht.



Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln