Autor Thema: Rechen- oder Denkfehler Double  (Gelesen 1192 mal)

Offline madmaxxx4

  • Frischling
  • *
  • Beiträge: 9
    • The Domino Blog
Rechen- oder Denkfehler Double
« am: 30.03.06 - 16:53:56 »
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!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Rechen- oder Denkfehler Double
« Antwort #1 am: 30.03.06 - 17:42:20 »
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

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.

Offline madmaxxx4

  • Frischling
  • *
  • Beiträge: 9
    • The Domino Blog
Re: Rechen- oder Denkfehler Double
« Antwort #2 am: 01.04.06 - 11:05:03 »
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.




 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz