Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fractionneur

1 réponse
Avatar
Michel Claveau - MVP
Bonsoir !

J'ai trouvé, par hasard, un petit code, qui retrouve une fraction
correspondant à un flottant.

Si que des fois ça pouvait servir à quelqu'un...

Michel Claveau



import math

def DecToFraction(frDec, iAcc=2):
aDec = int(abs(frDec))
aAns = [1, aDec, 0, 0]
if frDec < 0 :
aAns[0] = -1

if frDec % 1:
fr = float(abs(frDec - aDec))
a = float(math.floor(fr))
b = float(math.ceil(fr))
c=b
d=b
while True:
x = round((b*fr-a)/(c-d*fr), 12)
low = math.floor(x)
high = math.ceil(x)
a1 = (a+low*c)
b1 = (b+low*d)
c1 = (a+high*c)
d1 = (b+high*d)
a = float(a1)
b = float(b1)
c = float(c1)
d = float(d1)
if abs(a/b-fr)<10.0**(-iAcc):
aAns[2] = a
aAns[3] = b
break
if abs(c/d-fr)<10.0**(-iAcc):
aAns[2]=c
aAns[3]=d
break

#return aAns
return str(int(aAns[1])*int(aAns[3])+int(aAns[2]))+"/"+str(int(aAns[3]))

print DecToFraction(123.456789,1)
print DecToFraction(123.456789,2)
print DecToFraction(123.456789,3)
print DecToFraction(123.456789,4)
print DecToFraction(123.456789,6)

1 réponse

Avatar
juno
Sans avoir étudié en détail le code, il est aussi possible d'utiliser le
module fraction de la librairie standard :

import fraction
fractions.Fraction().from_float(123.456789)

retourne :
Fraction(8687499202136843, 70368744177664)