Ok. a ver ahora un poco más digerido:
Código Delphi
[-]
uses Math;
function RealaFraccion(R: string): string;
var a, b, mcd, mcm, tmp, resto, NDecimales: INTEGER;
begin
if StrToFloatDef(R, 0) = 0 then
begin
Result := '0';
Exit;
end;
NDecimales := Length(R) - Pos('.', R);
a := Trunc(StrToFloat(R) * Power(10, NDecimales));
b := Trunc(Power(10, NDecimales));
tmp := a;
mcd := b;
repeat
resto := tmp mod mcd;
if resto <> 0
then begin
tmp := mcd;
mcd := resto;
end;
until resto = 0;
Result := IntToStr(A div mcd) + '/' + IntToStr(B div mcd);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := RealaFraccion(Edit1.Text)
end;
Seguro que pudiera optimizarse en varias partes... es una versión preliminar y he sido un poco cobarde al no querer involucrarme demasiado con los diferentes tipos de datos flotantes que hay pero en mi experiencia trabajar de este modo te da mucha tranquilidad y es mejor llevarla tranquila por ese lado... prefiero tratar los flotantes limitados como estos como cadenas para evitar conflictos y respetar al máximo el número real que tu quieres convertir en fracción...
Saludos