Domino 9 und frühere Versionen > ND8: Entwicklung

LotusScript: Format()/Round() runden Summe auf

(1/2) > >>

Gravedigger:
Hallo Notes Spezialisten,

ich hoffe mein Problem ist nicht zu kompliziert. Folgendes:
Wir nutzen im Unternehmen ein LotusScript Agent, welcher etliche Dokumente einliest und daraus für jedes Dokument ein XML zur Rechnungserstellung generiert. Jedes der Dokumente enthält ein Feld "fdPositions", darin sind die Beträge der Rechnungspositionen als Array, z. B. 100,00, 55,66, 154,72 usw. gespeichert.

Die Dokumente werden in einer Ansicht dargestellt. Die letzte Spalte enthält die Summe "@Sum(fdPositions)", als Beispiel 252147,10. Die Formatierung ist auf Nummer mit 2 Dezimalstellen eingestellt.

In der erstellen XML Datei wird als Summe aber 252147,14 ausgegeben. Es sind nur 4 Cent Unterschied, aber wer Buchhalter kennt, dass kann schon eine mittelschwere Katastrophe auslösen.  ;)
Mein Debugging während er XML Erstellung ergab, dass die Summe über eine For-Schleife ermittelt wird.
for i%=0 to ubound(doc.fdPositions)
sum! = sum! + doc.fdPositions(i%)
next

Lasse ich mir jetzt die Variable sum! ausgeben, erhalte ich 252147,10 in der Anzeige. Es wurde noch nichts formatiert oder gerundet!
Jetzt kommt im Agent zur Sicherheit die Formatierung per Format(sum!, "Standard") und jetzt ist die Summe 252147,14. Das Gleiche geschieht wenn anstatt Format() auf Round(sum!, 2) gewechselt wird.  ???

Und jetzt noch ein Ergebnis der Analyse: Diese Differenz tritt nur bei Rechnungssummen über 200000 auf.

Hatte jemand mit diesem "Problem" schonmal zu kämpfen? - Ich bin für jeden Hinweis dankbar.


Gruß
gravedigger

Glombi:
Ich würde die Summe bereits im Dokument in einem extra Feld berechnen und in der Ansicht in der Summenspalte nur das Feld anzeigen.

Andreas

Tode:
Diesen Fehler kenne ich: Das Problem ist ein Bug in Round / Format und hat damit zu tun, dass in einem PC die Zahlen immer Binär gespeichert sind, und deshalb IMMER eine Umrechnung passieren muss...
Hier zwei Dokumente von IBM zu dem Thema: Wird nicht gefixt werden... Aber wenigstens ist im zweiten link ein Workaround...
http://www-01.ibm.com/support/docview.wss?uid=swg1LO49377
https://www-304.ibm.com/support/docview.wss?uid=swg21210270

Gravedigger:
Hallo,

Danke für die Antworten. Dann werde ich morgen mal den Workaround umsetzen.
Bin auf das Ergebnis sehr gespannt.


Schönen Abend und Gruß
gravedigger

ghostmw:
Moin,

ich hätte da vielleicht eine andere Variante, die dir vielleicht helfen könnte.


1. ) Man multipliziert die Zahl mit der n-ten Zehnerpotenz (n = Anzahl Stellen hinter dem Komma, negative Werte = Anzahl Stellen vor dem Komma)
2. ) Man addiert 0.5 zu dem Ergebnis
3.) Führt auf das Ergebnis  ein @Integer (Formel) oder Fix (LotusScript) aus
4.) nun dividiert man das Ergebnis durch die n-te Zehnerpotenz (n=Anzahl Stellen hinter dem Komma)

5.) Fertig gerundetes Ergebnis



Beispiel:

Zahl = 0.15
n = 1 Stellen hinter dem Komma

E1 = 0.15 * 10^1 = 1.5
E2 = 1.5 + 0.5 = 2
E3 = @Integer/Fix  ( 2 ) = 2
E4 = 2 / 10^2 = 0.2

e voilá

Vielleicht kann dir das helfen ?

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln