如何将小数转换为四舍五入分数?



是否有办法将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

最新更新