Euler #26,如何以更高的精度将有理数转换为字符串?
我想获得更精确的 1/7
,但它被截断了。有理数转换时如何获得更好的精度?
>>> str(1.0/7)[:50]
'0.142857142857'
I want to get 1/7
with better precision, but it got truncated. How can I get better precision when I convert a rational number?
>>> str(1.0/7)[:50]
'0.142857142857'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Python 有一个用于任意精度计算的内置库:Decimal。例如:
有关更多详细信息,请参阅 Python Decimal 文档。您可以将精度更改为您需要的最高值。
Python has a built-in library for arbitrary-precision calculations: Decimal. For example:
Look at the Python Decimal documentation for more details. You can change the precision to be as high as you need.
您可以将分子乘以一个大的 10^N 并坚持使用任意精度的整数。
编辑
我的意思是:
Python的整数是任意精度的。 Python 的浮点数从来都不是任意精度的。 (正如另一个答案所指出的那样,您必须使用十进制)
You could multiply the numerator by a large 10^N and stick with arbitrary-precision integers.
EDIT
i mean:
Python's integers are arbitrary precision. Python's floats are never arbitrary precision. (you'd have to use Decimal, as another answer has pointed out)
使用 Perl(因为我不会写 Python;-):
正如您可以手动验证的那样,数字是重复的。使用
"%.50f"
打印会给您带来更精确的错觉。Using Perl (because I can't write Python ;-):
As you can verify by hand, the digits repeat. Printing using
"%.50f"
will give you the illusion of more precision.使用 gmpy:
您无法使用普通浮动来做到这一点 - 它们只是不这样做有足够的精度 50 位数字!我想有一种方法可以用
fractions.Fraction
来做到这一点(在 2.6 或更高版本中),但我不熟悉除'1/7'< 以外的任何格式化方法/code> (对你的情况来说不是很有用!-)。
With gmpy:
You can't do it with normal floats -- they just don't have enough precision for 50 digits! I imagine there's a way to do it (in 2.6 or better) with
fractions.Fraction
, but I'm not familiar with any way to format it otherwise than as'1/7'
(not very useful in your case!-).