Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Fastreport - falscher Wert ? (https://www.delphipraxis.net/171419-fastreport-falscher-wert.html)

user0815 6. Nov 2012 10:56

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:
    SQL.Add(' FUELLINGDATA.QUANTITY,');
    SQL.Add(' PREIS.PREIS,');
    SQL.Add(' FUELLINGDATA.QUANTITY * PREIS.PREIS AS BETRAG');
Nach dem Öffnen formatiere ich die Werte für die Anzeige
Delphi-Quellcode:
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';
Innerhalb von FR gebe ich die Summe in einem TfrxMemoView Feld mit folgender Formel [SUM(<frxDsQuery1Data."BETRAG">,MasterData1)] aus.
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:
procedure frxDsQuery1DataBETRAGOnAfterData(Sender: TfrxComponent);
begin
  SumBetrag := SumBetrag + Value; // falsches Ergebnis da der ungerundete Wert addiert wird                                                                                                                              
end;
Als Anhang den relevanten Teil des Reports als 'Excel table' Export.
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:
  SumBetrag := SumBetrag + StrToFloat(FormatFloat('0.00', Value));
Somit kann ich mich auf die Berechnung von FR ja nicht verlassen oder habe ich etwas übersehen ?
:gruebel:

Stevie 6. Nov 2012 11:07

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)

mkinzler 6. Nov 2012 11:10

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.

user0815 6. Nov 2012 12:25

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:
procedure frxDsQuery1DataBETRAGOnAfterData(Sender: TfrxComponent);
begin
  SumBetrag := SumBetrag + Value;
end;
Habe jetzt in SQL den ROUND Befehl eingefügt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz