即使一个人,也要活得像军队一样!

Python-- Python中浮点数精度问题(四舍六入五成双的陷阱)

python中的浮点数精度问题

1
2
>>> 0.1 + 0.2
0.30000000000000004

我们不难发现python中浮点数的精度是存在问题的,这其中的原因是什么呢?
首先十进制的有理数表达是怎样的呢:

满足:
$\frac{x}{10^n}$,其中x≠∞, n∈N 的表达,自然而然二进制中有理数就满足$\frac{x}{2^n}$,其中x≠∞, n∈N

而0.1 和 0.2 都不满足

Round(四舍六入五成双)中的风险

1
2
3
4
>>> round(0.135, 2)
0.14
>>> round(0.235, 2)
0.23

我们看到0.135做到了, 而0.235却失败了。这也是由’精度’问题导致的。在我们严格要求精度的时候怎么解决呢?

1
2
3
4
5
6
# 导入十进制数据或金融数据
from decimal import Decimal
x = Decimal('0.235') # 字符串可以对数据精确表达,float本身就已经有可能是无理数了,精度就已经缺失了
round(x, 2)

# Decimal('0.24')

以上。
– end –

-------------本文结束感谢您的阅读-------------