Autor Thema: INT rechnet fehlerhaft  (Gelesen 1808 mal)

Offline Ronny

  • Junior Mitglied
  • **
  • Beiträge: 50
INT rechnet fehlerhaft
« 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)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: INT rechnet fehlerhaft
« Antwort #1 am: 26.11.14 - 22:24:34 »
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

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 248
  • Geschlecht: Männlich
Re: INT rechnet fehlerhaft
« Antwort #2 am: 27.11.14 - 08:06:18 »
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

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: INT rechnet fehlerhaft
« Antwort #3 am: 27.11.14 - 11:16:35 »
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.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz