首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Euler #26,如何将有理数转换为精度更高的字符串?

Euler #26,如何将有理数转换为精度更高的字符串?
EN

Stack Overflow用户
提问于 2009-11-12 11:54:11
回答 2查看 942关注 0票数 7

我想获得更高精度的1/7,但它被截断了。如何在转换有理数时获得更高的精度?

代码语言:javascript
运行
复制
>>> str(1.0/7)[:50]
'0.142857142857'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-12 12:34:44

Python有一个用于任意精度计算的内置库: Decimal。例如:

代码语言:javascript
运行
复制
>>>from decimal import Decimal, getcontext
>>>getcontext().prec = 50
>>>x = Decimal(1)/Decimal(7)
>>>x
Decimal('0.14285714285714285714285714285714285714285714285714')
>>>str(x)
'0.14285714285714285714285714285714285714285714285714'

有关更多详细信息,请查看Python Decimal documentation。您可以将精度更改为所需的最高精度。

票数 9
EN

Stack Overflow用户

发布于 2009-11-12 12:10:08

使用gmpy

代码语言:javascript
运行
复制
>>> 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'之外,我不熟悉其他任何格式化它的方法(在你的例子中不是很有用!)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1719776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档