我正在寻找的是一种将python Fraction() 类型写入任意小数位的方法。我查看了分数和小数的python文档,但我看不到任何转换或写出分数的方法。
所以我正在寻找的是一些打印出来的方法
Fraction(5, 7)
作为
0.7142857142857142857142857142857142857142857142857142
代替
>> float(Fraction(5, 7))
0.7142857142857143
指定 DP 的数量。
Decimal
您可以使用该类具有任意精度。
from fractions import Fraction
from decimal import localcontext, Decimal
def print_fraction(f, digits):
assert(f.imag == 0)
# Automatically reset the Decimal settings
with localcontext() as ctx:
ctx.prec = digits
print(Decimal(f.numerator) / Decimal(f.denominator))
f = Fraction(5, 7)
print_fraction(f, 52)
这将打印0.7142857142857142857142857142857142857142857142857143
.
from decimal import Decimal, localcontext
from fractions import Fraction
def format_fraction(f, precision):
with localcontext() as ctx:
ctx.prec = precision
return str(Decimal(f.numerator) / f.denominator)
f = Fraction(5, 7)
print(format_fraction(f, 52))
def format_fraction(f, precision):
if f == 0: return "0"
s = str(int(f)) + "."
f -= int(f)
with localcontext() as ctx:
ctx.prec = precision
s += str(Decimal(f.numerator) / f.denominator).partition(".")[2]
return s
这将返回"1341.73"
而不是"1.3E+3"
on format_fraction(Fraction(88554379,66000),2)
。
您可以使用字符串格式化来做到这一点。有了它,你总是可以编写自己的包装函数。
>>> '%.64f' % (5 / 7.0)
'0.7142857142857143015746146375022362917661666870117187500000000000'