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