python中需要更多小数位

时间:2012-12-27 16:27:56

标签: python

我正在编写一个python代码,需要将数字评估到很多小数位 - 大约14或15位。

我希望结果能够顺利增加,例如:

0.123456789101997
0.123456789101998
0.123456789101999
0.123456789102000
0.123456789102001

但我似乎只是将数字(当我打印出来时)到12位小数,所以我的数字实际上是跳跃的步骤:

0.123456789101
0.123456789101
0.123456789101
0.123456789102
0.123456789102

起初,我假设这个数字在幕后被列为更多的小数位,但是只打印到12,但是当我打印结果时,它们似乎也是按步骤绘制,而不是顺利。

如果有人能指出我正确的方向来解决这个问题,我真的很感激 - 谢谢。

7 个答案:

答案 0 :(得分:8)

使用repr()print使用str()将十进制数字减少为12,以使输出用户友好。

In [17]: a=0.123456789101997

In [18]: str(a)
Out[18]: '0.123456789102'

In [19]: repr(a)
Out[19]: '0.123456789101997'

或字符串格式:

In [21]: "{0:.15f}".format(a)
Out[21]: '0.123456789101997'

答案 1 :(得分:7)

尝试使用Decimal模块怎么样?

In [2]: import decimal

In [3]: d = decimal.Decimal('0.123456789101997')

In [4]: print d
0.123456789101997

答案 2 :(得分:3)

如前面的答案所示,您可以通过decimal模块使用十进制数字,或者在打印浮点值时可以指定15个小数位,以覆盖默认的12个位置。

在许多Python实现中,普通浮点数是IEEE 754兼容的(12)“binary64”双精度数,因此它们的尾数中实际有53位。由于53*math.log(2)/math.log(10)大约是15.95,所以binary64数字支持超过15个十进制数字的精度,但不是16。

以下是您可以尝试的示例,其输出显示为:

u=1e-15
v=0.123456789101997
for k in range(13):print '{:20.15f}'.format(v+k*u)
   0.123456789101997
   0.123456789101998
   0.123456789101999
   0.123456789102000
   0.123456789102001
   0.123456789102002
   0.123456789102003
   0.123456789102004
   0.123456789102005
   0.123456789102006
   0.123456789102007
   0.123456789102008
   0.123456789102009

答案 3 :(得分:2)

您可以选择使用模块decimal来实现此目的。

您需要导入模块。

>>> from decimal import *

然后,您需要通过调用getcontext()函数指定所需的小数点数。以下代码要求25个小数点。

>>> getcontext().prec = 25

然后,您需要指定算术。以下代码确定pi的值,最多25个小数点。

>>> Decimal(22) / Decimal(7)

输出

>>> Decimal('3.142857142857142857142857')

答案 4 :(得分:1)

您可以使用Decimal来获得更好的精确度。

答案 5 :(得分:0)

要显示更多小数点,请将其添加到代码末尾:

print('%.60f' % value_x)

“。60”表示要显示的小数点后60位,“ value_x”表示要显示的任何值。

除了默认输出(以科学计数法表示)之外,我还需要将P值输出为实际的十进制数时,会使用此值。

示例:

In [1]: pearson_coef, p_value = stats.pearsonr(df['horsepower'], df['price'])
In [2]: print("The Pearson Correlation Coefficient is", pearson_coef, " with a P-value of P = ", p_value, "or ")
In [3]: print('%.50f' % p_value)
Out [4]: The Pearson Correlation Coefficient is 0.8095745670036559  with a P-value of P = 6.369057428260101e-48 or 0.00000000000000000000000000000000000000000000000637

答案 6 :(得分:-2)

x=56.0
print("{:.2f}".format(x))

如果执行此代码,我们将获得-

输出: 56.00