打印超出其精度的浮子

时间:2015-09-27 12:59:02

标签: python floating-point formatting output precision

当我运行此代码时,

print('{:.15f}'.format(123456789.55555555555555555555555555555555555555))
print('{:.25f}'.format(0.5555555555555555555555555555555555555555555555))

我得到了这个输出:

123456789.555555552244186
0.5555555555555555802271783

这些额外数字来自哪里(123456789.55555555 2244186,0.5555555555555555 802271783),为什么它们不为零?

我猜它们是由转换算法生成的并且毫无意义,但我想了解更多信息。如果转换算法使它们为零,那就太好了。

1 个答案:

答案 0 :(得分:3)

当您尝试存储这些值时,实际存储的是最接近的可表示的双精度二进制浮点值。这就是正在印刷的东西。所以这些额外的数字实际上是有意义的 - 它们代表了存储的实际值。

请参阅Rob Kennedy's useful web page,其中显示了与给定值最接近的可表示浮点数。如您所见,the closest double precision value to your first value是:

+ 1234 56789.55555 55522 44186 40136 71875

closest double precision value to your second value是:

+ 0.55555 55555 55555 58022 71783 25003 47867 60807 03735 35156 25

这些值与Python产生的值相匹配。

所以,这纯粹是一个可表示性的问题。关于浮点的更多参考: