最近在Python学习中遇到一些关于浮点数不准确的问题,记录一下。
1.一般使用np.linspace()
import numpy as np
a = np.linspace(0.0, 1.0, 11)
print(a)
[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]
2.而我在循环打印时出现以下问题:
>>>for i in a:
print(i)
0.0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6000000000000001
0.7000000000000001
0.8
0.9
1.0
其中会出现一些不准确的浮点数,经过简单查阅资料后,发现这是因为底层以有限的精度存储二进制浮点数。
也就是说,在Python关于浮点数的运算都会存在不准确的问题,在使用中应该尽量避免出现这种问题,特别是涉及到要求的精度比较高的时候,可以通过乘因子变为整数型,进行运算。
3.我的解决方案:
## 通过np.round控制浮点数位数
for i in np.round(a,3):
print(i)
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
另外在我设定的场景内,可以通过统一放大10倍,而不影响结果。这样就可以避免浮点数运算,也是一种解决方案。