3

我正在寻找的是一种将python Fraction() 类型写入任意小数位的方法。我查看了分数和小数的python文档,但我看不到任何转换或写出分数的方法。

所以我正在寻找的是一些打印出来的方法

Fraction(5, 7)

作为

0.7142857142857142857142857142857142857142857142857142

代替

>> float(Fraction(5, 7))
0.7142857142857143

指定 DP 的数量。

4

4 回答 4

6

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.

于 2012-06-22T11:10:31.257 回答
2
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))
于 2012-06-22T12:43:54.143 回答
0
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)

于 2013-09-17T19:46:10.860 回答
-3

您可以使用字符串格式化来做到这一点。有了它,你总是可以编写自己的包装函数。

>>> '%.64f' % (5 / 7.0)
'0.7142857142857143015746146375022362917661666870117187500000000000'
于 2012-06-22T11:09:14.753 回答