Thema: Delphi Delphi & Runden

Einzelnen Beitrag anzeigen

brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#14

Re: Delphi & Runden

  Alt 16. Sep 2009, 10:32
Meine Lösung:

Delphi-Quellcode:

// uses BDE, Math;

// auf Nachkommastellen runden
function RoundNumber(_Value: Extended;
  _Prec: Integer): Extended;
begin
  Result := Trunc(Abs(_Value) * Power(10, _Prec) + 0.5) / Power(10, _Prec) * Sign(_Value);
end;

// Feld in Tabelle setzen
procedure SetNumber(_Table: TTable; _Field: string;
  _Number: Extended);
begin
  _Table[_Field] := RoundNumber(_Number, GetPrec(_Table, _Field));
end;

// Feld aus Tabelle auslesen
function GetNumber(_Table: TTable;
  _Field: string): Extended;
begin
  Result := RoundNumber(_Table[_Field], GetPrec(_Table, _Field));
end;

// da Table.FieldDef.Size und Precision nicht die Nachkommastellen liefert (unoptimiert):

function GetPrec(_Table: TTable; _Field: string): Integer;
var
  FldsArr: array of FLDDesc;
  i: Integer;
begin
  Result := 0;
  SetLength(FldsArr, _Table.FieldCount + 1);
  Check(DbiGetFieldDescs(_Table.handle, @FldsArr[0]));
  for i := Low(FldsArr) to High(FldsArr) do
    if SameText(FldsArr[i].szName, _Field) then
      Result := FldsArr[i].iUnits2;
end;
  Mit Zitat antworten Zitat