python需要更多的小数位

2024-04-26 18:45:04 发布

您现在位置: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位,但当我打印结果时,它们似乎也在按步骤绘制,而不是平滑地绘制。

如果有人能指点我正确的方向来解决这个问题,我会非常感激的-谢谢。


Tags: 代码地方绘制步骤数字方向我会小数点
3条回答

试试十进制模块怎么样?

In [2]: import decimal

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

In [4]: print d
0.123456789101997

使用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'

正如前面的答案所建议的,您可以通过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

相关问题 更多 >