3

私が探しているのは、PythonのFraction()型を任意の小数点以下の桁数に書き出す方法です。FractionとDecimalのPythonドキュメントを見てきましたが、Fractionを変換または書き出す方法がわかりません。

だから私が探しているのは印刷する方法です

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

これはon"1341.73"の代わりに返されます。"1.3E+3"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 に答える