我想获得更高精度的1/7
,但它被截断了。如何在转换有理数时获得更高的精度?
>>> str(1.0/7)[:50]
'0.142857142857'
发布于 2009-11-12 04:34:44
Python有一个用于任意精度计算的内置库: Decimal。例如:
>>>from decimal import Decimal, getcontext
>>>getcontext().prec = 50
>>>x = Decimal(1)/Decimal(7)
>>>x
Decimal('0.14285714285714285714285714285714285714285714285714')
>>>str(x)
'0.14285714285714285714285714285714285714285714285714'
有关更多详细信息,请查看Python Decimal documentation。您可以将精度更改为所需的最高精度。
发布于 2009-11-12 04:10:08
使用gmpy
>>> import gmpy
>>> thefraction = gmpy.mpq(1, 7)
>>> hiprecfloat = gmpy.mpf(thefraction, 256)
>>> hiprecfloat.digits(10, 50, -10, 10)
'0.14285714285714285714285714285714285714285714285714'
>>>
你不能用普通的浮点数做到这一点--它们没有足够的精度来处理50位数字!我想有一种方法(在2.6或更好的版本中)可以用fractions.Fraction
来实现,但是除了'1/7'
之外,我不熟悉其他任何格式化它的方法(在你的例子中不是很有用!)。
https://stackoverflow.com/questions/1719776
复制相似问题