Domino 9 und frühere Versionen > ND8: Entwicklung
LotusScript: Format()/Round() runden Summe auf
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