是否有办法将84.666666666667转换为84和2/3?我试过使用as.integer_ratio(),但我似乎不能使它工作。例如,我希望输出如下所示:
温度为84.66666666666667。
温度为84度2/3。
您可以使用分数模块:
from fractions import Fraction
l=16 # meaning any reduced fraction can be /16 like 15/16 or better
frac=Fraction(84.66666666666667).limit_denominator(l)
f2=divmod(frac.numerator, frac.denominator)
print(f'{f2[0]} {f2[1]}/{frac.denominator}')
打印:
84 2/3
或者,你可以维护一个"可接受"分数的列表,然后找到最接近实际分数的部分:
# these are just kinda random...
f_I_like=[Fraction(*e) for e in [(1,3),(1,4),(1,8),
(1,10),(2,3),(15,16),(3,8),(1,16),(5,8),(3,16),(7,8),(5,16)]]
def closest(li, x):
return li[min(range(len(li)), key = lambda i: abs(li[i]-x))]
frac=84.3333.as_integer_ratio()
f2=divmod(frac[0], frac[1])
f3=f2[1]/frac[1]
print(f'{f2[0]} {closest(f_I_like, f3)}')
打印
84 1/3