Einzelnen Beitrag anzeigen

khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#1

kaufmännisches Runden in einer SQL-abfrage

  Alt 14. Apr 2009, 08:58
Hallo zusammen,

zum kaufmänischen Runden habe ich hier im Forum folgende Function gefunden:
Delphi-Quellcode:
function RoundCurrency(const Value:Currency; const nk:Integer):Currency;
const
  faktors : array[-3..3] of Integer = (
     10000000, 1000000, 100000, 10000, 1000, 100, 10);
var
  x : Int64;
  y : Int64;
begin
  // Currency hat ja nur 4 Nachkommastellen
  if (nk>=4) or (Value=0) then
  begin
    Result := Value;
    Exit;
  end;
  if nk < Low(faktors) then
    raise EInvalidArgument.CreateFmt('RoundCurrency(,%d): invalid arg', [nk]);


  // Currency nach Int64 casten
  x := PInt64(@Value)^;
  y := faktors[nk];

  if x > 0 then
    x := ((x+(y div 2)) div y)*y
  else
    x := ((x-(y div 2)) div y)*y;

  // Int64 nach Currency casten
  Result := PCurrency(@x)^;
end;
das funktioniert auch soweit richtig, zumindest habe ich in der Kürze der Zeit keinen Fehler finden können.

jetzt stellt sich mir folgendes Problem:
in einer sql-Abfrage habe ich ein berechnetes feld:


..., (nettopreis + (nettopreis/100 * CAST(:mwstsatz AS NUMERIC(15,2)))) as bruttopreis,....

diese wird für die darstellung im Grid folgendermassen formatiert:

TFloatField(FpreiseQuery.Fields[4]).DisplayFormat := '######0.00';

wie kann ich den bruttopreis jetzt kaufmännisch runden ?




Danke für eure Ideen.


Gruss KH
Karl-Heinz
  Mit Zitat antworten Zitat