Salut à tous.
J'ecris une fonction qui transforme un nombre decimal en fraction non réduite (pour l'instant).
la technique est très simple, je multplie le nombre par 10,100,1000,x jusqu'à ce que la valeur après la virgule du produit soit nul.
Voici donc mon code :
function DecimalToFraction(NombreDecimal:extended):TFraction;
var
Fraction:TFraction;
Multiplicateur:int64;
DecimalTemporaire:extended;
begin
Multiplicateur:=1;
DecimalTemporaire:=NombreDecimal;
while Frac(DecimalTemporaire)<>0 do
begin
Multiplicateur:=Multiplicateur*10;
DecimalTemporaire:=NombreDecimal*Multiplicateur;
end;
Fraction.Numerateur:=Trunc(DecimalTemporaire);
Fraction.Denominateur:=Multiplicateur;
Result:=Fraction;
end;
Ca marche très bien pour certaines valeurs, pour d'autres delphi me fait n'importe quoi

Exemple avec le nombre decimal
1.4615.
Le calcul se passe bien jusqu'au 4° passage dans la boucle, au dela Frac(DecimalTemporaire) me sors des valeurs bizarres.
A ce stade on a normalement 1.4615*10000=14615, et donc Frac(14615) devrait être nul en toute logique, c'est pas le cas apparement puisque delphi me dit que Frac(14615) est egal à ... 8.881[...]e-16

J'ai cru comprendre que c'etait une chose normale, que ça venait de la représentation des nombres réels ...
Sauf que dans mon cas, c'est très genant, en plus d'être archi faux mathematiquement.