Übersetzt von VB nach Delphi von hier:
http://www.geocities.com/oosterwal/c.../dec2frac.html
Die Funktion versucht eine rationale Zahl (= Bruch) zu finden, die der Dezimalzahl möglichst nahe liegt (im Bereich von Accuracy).
Delphi-Quellcode:
type
TFraction = record
Numerator: Integer;
Denominator: Integer;
end;
function Dec2Frac(const Decimal, Accuracy: Double): TFraction;
var
tempd: Double;
f: TFraction;
neg: Shortint;
begin
f.Numerator := 0;
f.Denominator := 1;
if Decimal < 0 then
neg := -1
else
neg := 1;
tempd := 0;
while Abs(tempd - Decimal) > Accuracy do begin
if Abs(tempd) > Abs(Decimal) then
inc(f.Denominator)
else
f.Numerator := f.Numerator + neg;
tempd := f.Numerator / f.Denominator;
end;
Result := f;
end;
Delphi-Quellcode:
var
f: TFraction;
...
f := Dec2Frac(1.66667,0.001);
// f.Numerator = 5
// f.Denominator = 3