Zu viele Nachkommastellen in Summenvariable

Hallo,
ich fange gerade mit L&L an, V18, und habe ein Problem mit der Summierung. Oder mit dem Verständnis derselben ,-)

Wegen möglicher Rundungsdifferenzen speichere ich wie im Handbuch empfohlen in meiner DB die berechneten Endsummen von Preis * Anzahl und Netto * MWST. Die Werte werden mit nur 2 Nachkommastellen aus der DB gelesen und als String und LL_NUMERIC_LOCALIZED an L&L übergeben:
Netto 123,00
MWST 23,37
Brutto 146,37

Diese Werte lasse ich im Report summieren, als Ergebnis einer Abfrage mit LlGetVariableContents(…) bekomme ich aber:
Netto 123
MWST 23.370000000000000994759830064140260219573974609375
Brutto 146.3700000000000045474735088646411895751953125

In diesem Fall wurde nur ein Artikel berechnet, bei mehreren Artikeln und größeren Summen sind bereits an dritter Nachkommastelle Werte, die zu Rundungsfehlern führen können. Im Report bilde ich die Summen nur auf die Datenfelder ‘Rechnungsposten.gesamt’ etc.

Wo kommen die vielen Nachkommastellen her?

Gruß und Danke - Thomas

Sehr geehrter Herr Schrap

vielen Dank für Ihren Beitrag.

um ganz sicher zu gehen sollten Sie auch die insgesamt aufsummierten Werte (d.h. das Rechnungstotal) aus Ihrer Anwendung übergeben. Durch die Summierung werden die von Ihnen übergebenen Werte mehrfach für Berechnungen herangezogen, was die für Computer typischen Präzisionsprobleme erzeugt. Wenn Sie nur zweistellige Zahlen übergeben würde sich mit Verwendung von Round() ebenfalls Besserung erzielen lassen. Hierbei sind aber eben die im Handbuch beschriebenen Einschränkungen zu beachten - u.a. gibt es auch unterschiedliche Rundungsstrategien, diese können Sie über LL_OPTION_ROUNDINGSTRATEGY auswählen.

Mit freundlichen Grüßen

Erdal Alacali
Technischer Support
combit GmbH

Hallo und guten Tag Herr Alacali,

danke für den Tip, so funktioniert es. Da ich mir ein gekapseltes Reportobject ‘gebastelt’ habe, dass selbstständig durch die Datenbank geht und ich für zusätzliche Summenberechnungen nicht zum zweiten Mal durch die Datenbank will nehme ich lieber die Rundungsfunktion.

Zur Rundungsstrategie finde ich nur etwas in den Deklarationsdateien für Visual Objects:
// default: LL_ROUNDINGSTRATEGY_ARITHMETIC_SYMMETRIC

Weder in Progref.pdf, Designer.pdf noch in der Designer-Hilfe-Datei fand ich LL_OPTION_ROUNDINGSTRATEGY oder eine weitergehende Erklärung, selbst eine Textsuche in allen Dateien der LL18-Installation ergab nur Hinweise auf die Header-Definitionen.

Ich denke aber, dass ich mit dem Default gut klar kommen werde, also vIelen Dank für Ihre Hilfe und die Problemlösung.

Thomas Schrap