10

我正在编写一个 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,但是当我打印结果时,它们似乎也在逐步绘制,而不是平滑。

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

4

7 回答 7

13

试试 Decimal 模块怎么样?

In [2]: import decimal

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

In [4]: print d
0.123456789101997
于 2012-12-27T16:32:10.823 回答
10

使用repr(),printstr()小数位数减少到 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'
于 2012-12-27T16:36:06.227 回答
9

为此,您可以选择使用模块小数。

您需要导入模块。

>>> from decimal import *

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

>>> getcontext().prec = 25

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

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

输出是

>>> Decimal('3.142857142857142857142857')
于 2017-08-04T21:12:05.873 回答
3

正如前面的答案中所建议的,您可以通过小数模块使用小数,或者在打印浮点值时可以指定 15 位小数,以覆盖默认的 12 位。

在许多 Python 实现中,普通浮点数是与 IEEE 754 兼容的(1、2) “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
于 2012-12-27T18:15:08.217 回答
1

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

于 2012-12-27T16:31:56.327 回答
1

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

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
于 2020-10-16T01:19:29.137 回答
-2
x=56.0
print("{:.2f}".format(x))

如果我们执行这段代码,我们将得到——

输出:56.00

于 2020-04-06T14:53:30.823 回答