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

时间:2013-10-23 06:51:13

标签: python rounding precision

我现在正在学习Python的基础知识,我认为,作为一种学习练习,我会尝试写一些与“e”数字相近的东西。无论如何,它总是给出11个小数位的答案,我希望它给出更像1000个小数位的东西。我该怎么做?

3 个答案:

答案 0 :(得分:3)

你确定你需要让它们“更精确”吗?或者你只需​​要看到比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中使用double实现; sys.float_info

中提供了有关运行程序的机器的浮点数的精度和内部表示的信息。

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

答案 1 :(得分:1)

如果你想要它是一个数字,精度为千位数,简短的答案是你不能..

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

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

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

答案 2 :(得分:0)

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

IEEE-754双精度为64位(8字节),分数有效数的52位出现在存储器格式中,总精度约为16位十进制数。

因此,要表示浮点数具有更高的精确度,您应该使用Decimal

import decimal
decimal.getcontext().prec = 100