python - 打印超出其精度的 float

标签 python floating-point formatting output precision

当我运行这段代码时,

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

我得到这个输出:

123456789.555555552244186
0.5555555555555555802271783

这些额外的数字从何而来(123456789.555555552244186, 0.5555555555555555802271783),为什么它们不为零?

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

最佳答案

当您尝试存储这些值时,实际存储的是最接近的可表示 double 二进制浮点值。这就是正在打印的内容。所以这些额外的数字实际上是有意义的——它们代表存储的实际值。

请参阅 Rob Kennedy's useful web page,它显示最接近给定值的可表示 float 。如您所见,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 生成的值相匹配。

所以,这纯粹是一个代表性问题。更多关于浮点的引用:

关于python - 打印超出其精度的 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32808158/

相关文章:

c++ - double 到固定宽度的字符串转换

python正则表达式解析div标签

python - 找到超过特定阈值的概率

python - 将 numpy.ndarray 转换为 imageio.core.util.Image

java - 如何获得架构支持的最小的 next 或 previous 可能的 double 值?

java - 如何让输出显示尾随零?

python - (Python) 无法查看 Matplotlib 图

matlab - Matlab中如何判断输入是比率还是 float ?

bash:遍历 float 列表

java - Eclipse 中的 AutoIndent 可能吗?