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