![]() |
Fastreport - falscher Wert ?
Liste der Anhänge anzeigen (Anzahl: 1)
Habe ich hier was übersehen, falsch gemacht, oder rechnet FR falsch ?
Ich bilde einen Query
Delphi-Quellcode:
Nach dem Öffnen formatiere ich die Werte für die Anzeige
SQL.Add(' FUELLINGDATA.QUANTITY,');
SQL.Add(' PREIS.PREIS,'); SQL.Add(' FUELLINGDATA.QUANTITY * PREIS.PREIS AS BETRAG');
Delphi-Quellcode:
Innerhalb von FR gebe ich die Summe in einem TfrxMemoView Feld mit folgender Formel [SUM(<frxDsQuery1Data."BETRAG">,MasterData1)] aus.
procedure TDatenmodul.Query1AfterOpen(DataSet: TDataSet);
begin (DataSet.FieldByName('PREIS') as TFloatField).DisplayFormat := '0.000'; (DataSet.FieldByName('QUANTITY') as TFloatField).DisplayFormat := '0.00'; (DataSet.FieldByName('BETRAG') as TFloatField).DisplayFormat := '0.00'; Der Wert ist Format Number mit Format string: %2.2f eingestellt. Hier erhalte ich ein falsches Ergebnis. Rechne ich selber mit, so erhalte ich ebenfalls ein falsches Ergebnis.
Delphi-Quellcode:
Als Anhang den relevanten Teil des Reports als 'Excel table' Export.
procedure frxDsQuery1DataBETRAGOnAfterData(Sender: TfrxComponent);
begin SumBetrag := SumBetrag + Value; // falsches Ergebnis da der ungerundete Wert addiert wird end; Bilde ich die Summe des Betrags in der Excel Tabelle so erhalte ich Spalte BJ = 1164,49 FR gibt nach obigem Code 1164,50 aus was der ungerundeten Summe entspricht. Innerhalb des Reports wird die automatische Summe im TfrxMemoView auch mit 1164,50 ausgegeben. ersetze ich meine manuelle Berechnung durch den nachfolgenden Code, so erhalte ich das richtige Ergebnis
Delphi-Quellcode:
Somit kann ich mich auf die Berechnung von FR ja nicht verlassen oder habe ich etwas übersehen ?
SumBetrag := SumBetrag + StrToFloat(FormatFloat('0.00', Value));
:gruebel: |
AW: Fastreport - falscher Wert ?
Wenn ich das richtig sehe, passiert die Rundung doch nur durch das DisplayFormat. Dieses wird aber wohl kaum für die Berechnung der Summe berücksichtigt. In Excel hast du aber die Spalte summiert, in der schon das gerundete Ergebnis drin steht (und nicht nur formatiert, sondern durch den Export von FastReport).
Somit ist FastReport eigentlich genauer. Willst du erst die Einzelwerte runden und dann addieren, könntest du das schon in der Query machen, so dass FR schon die gerundeten Werte bekommt (z.B. über ein calculated Field) |
AW: Fastreport - falscher Wert ?
Nein FR rechnet ja richtig. Das ändern eines Anzeigeformat änder die Werte ja nicht. Es werden trotzdem die wirklichen (ungerundeten Werte) verwendet; und das ist m.E. auch richtig.
|
AW: Fastreport - falscher Wert ?
OK, Danke!
Somit steht in Value dann ja auch nicht der angezeigte Wert, da dieser noch formatiert ausgegeben wird.
Delphi-Quellcode:
Habe jetzt in SQL den ROUND Befehl eingefügt.
procedure frxDsQuery1DataBETRAGOnAfterData(Sender: TfrxComponent);
begin SumBetrag := SumBetrag + Value; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz