Bericht Kontenschema: Falsche Rundung durch FORMAT

10. März 2015 17:05

Hallo zusammen,

derzeit untersuche ich folgendes Problem:

Beim Druck des Berichts 25 werden die angezeigten Dezimalwerte formatiert. Dies geschieht in der Funktion FormatCellAsText in der Codeunit 8.

Code:
WITH ColumnLayout2 DO
  IF Value <> 0 THEN BEGIN
    CASE "Rounding Factor" OF
      "Rounding Factor"::None:
      //ValueAsText := FORMAT(ROUND(Value));
        ValueAsText := FORMAT(Value,0,NormalFormatString);
      "Rounding Factor"::"1":
        ValueAsText := FORMAT(ROUND(Value,1));
      "Rounding Factor"::"1000":
        ValueAsText := FORMAT(ROUND(Value / 1000,1));
      "Rounding Factor"::"1000000":
        ValueAsText := FORMAT(ROUND(Value / 1000000,1));
    END;


Im betreffenden Fall läuft er in den "Rounding Factor"::None Case und formatiert wie im Code zu sehen.

Hier das betreffende Beispiel:

Value: 24,9996812257409723
ValueAsText (nach dem Formatieren): '24,00'
NormalFormatString: '<Precision,2:2><Standard Format,0>'

Der erwartete Wert, 25,00, wird in der Matrix so auch angezeigt. Dort entsteht er durch das Nutzen der Funktion "RoundValue" in selbiger Codeunit. Den dort aufgerufenen Code habe ich im obigen Abschnitt mal kommentiert eingefügt.

Nach diversen Tests habe ich festgestellt, dass es immer so auftritt, wenn er eigentlich auf die nächste Ganzzahl aufrunden sollte. Ich kann mir das Verhalten nicht erklären. Einen Hotfix o.ä. konnte ich leider auch nicht finden.

Hat jemand schon einmal dieses Problem festgestellt? Gibt es eine Möglichkeit, die entsprechende Formatierung und die gewünschte Rundung zu erzielen?

Vielen Dank und viele Grüße

Re: Bericht Kontenschema: Falsche Rundung durch FORMAT

10. März 2015 19:13

Hi,

ich habe das von dir beschriebene Verhalten mal in einer Codeunit nachgebildet - erwartetes Ergebnis nach dem Runden 25.

kannst du das auch mal in einer Codeunit nachbilden? wenn dort bereits das falsche Ergebnis mit der gleichen Funktion kommt, dann stimmt was bei dir nicht - was ich mir nicht vorstellen kann.

wenn jedoch auch 25 rauskommt, dann wird dein value vorher (also vor dem eigentl. Runden) kaputt gemacht - hast du vor dem Runden mal Breakpoints gesetzt?

Re: Bericht Kontenschema: Falsche Rundung durch FORMAT

11. März 2015 11:36

Hallo,

danke für deine Rückmeldung.

Das Verhalten habe ich schon mit einem Bericht nachgebildet, d.h. eine eingegebene Zahl wird folgendermaßen gerundet:


Code:
ZahlGerundet := (FORMAT(Zahl, 0, '<Precision,2:2><Standard Format,0>'));
ZahlGerundet2 := (FORMAT(ROUND(Zahl)));


Auch hier ist das erste Ergebnis 24,00 und nur das Zweite 25,00.

Breakpoints habe ich gesetzt, ja. Value ist bis vor dem Runden beim Ursprungswert.

Habe ich etwas übersehen?

Viele Grüße

Re: Bericht Kontenschema: Falsche Rundung durch FORMAT

11. März 2015 16:56

Noch eine kleine Rückmeldung:

Auch innerhalb einer Codeunit gibt er die nächstkleinere Ganzzahl aus. Daran kann es also nicht liegen.
Tests in zwei anderen beliebigen Datenbanken ergaben dieselben Werte.

Als "Lösung" runde ich mittlerweile den Wert vor dem Formatieren, also:

Code:
ValueAsText := FORMAT(ROUND(Value),0,NormalFormatString);


So wird zwar der richtige Wert angezeigt, aber zufrieden macht mich das nicht.

Vielleicht hat ja noch jemand eine erhellende Idee :wink: