如何在Python中使数字更精确?

如何在Python中使数字更精确?,python,rounding,precision,Python,Rounding,Precision,我现在正在学习Python的基础知识,我想,作为一个学习练习,我会尝试写一些接近数字“e”的东西。不管怎样,它总是给出11位小数的答案,我希望它能给出1000位小数。我该如何做到这一点?您确定需要使它们“更精确”吗?或者您只需要看到比Python默认显示更多的数字 >>> import math >>> math.pi 3.141592653589793 >>> >>> '{0:0.2f}'.format(math.pi)

我现在正在学习Python的基础知识,我想,作为一个学习练习,我会尝试写一些接近数字“e”的东西。不管怎样,它总是给出11位小数的答案,我希望它能给出1000位小数。我该如何做到这一点?

您确定需要使它们“更精确”吗?或者您只需要看到比Python默认显示更多的数字

>>> import math
>>> math.pi
3.141592653589793
>>>
>>> '{0:0.2f}'.format(math.pi)
'3.14'
>>>
>>> '{0:0.30f}'.format(math.pi)
'3.141592653589793115997963468544'
>>>
>>> '{0:0.60f}'.format(math.pi)
'3.141592653589793115997963468544185161590576171875000000000000'
但是,请注意

浮点数通常在C中使用双精度实现;有关运行程序的计算机的浮点数的精度和内部表示形式的信息,请参阅


我向你保证,π在48位之后不会变为零:-)

如果你想让它成为一个精度为1000位的数字,简单的回答是你不能

解决方法是,您可以使用该模块。以下是一个例子:

import decimal
a = decimal.Decimal('2387324895172987120570935712093570921579217509185712093')

然而,在这种情况下,a不再是一个数字。它只是
decimal.decimal
类的一个实例。好吧,你仍然可以用它做一些数学运算。

现在几乎所有的机器都使用IEEE-754浮点运算,几乎所有的平台都将Python浮点映射到IEEE-754“双精度”

IEEE-754 double具有64位(8字节),分数有效位的52位以内存格式显示,总精度约为16位十进制数字

因此,要表示精度更高的浮点数,应该使用


计算机可以存储任何你可以编码的东西,只要计算机能存储的比特数是多少(正如你可能记得的那样,现在的比特数是几十亿到几万亿)。您所称的“数字”只是一种特定的编码(IEEE 754双精度浮点)。在Python中,float只是
float
类的一个实例。
Decimal
对象与
float
对象一样是一个数字。就计算机科学而言,两者都不是特别的。谢谢你的解释。
import decimal
decimal.getcontext().prec = 100