如图,Python2.7在使用eval计算浮点数表达式的时候,
eval('0.3-0.1==0.2') # 输出为False
eval('%d - %d == %d'%(0.3, 0.1, 0.2)) # 输出为True
eval('%s - %s == %s'%(0.3, 0.1, 0.2)) # 输出为False
eval('%s - %s == %s'%('0.3', '0.1', '0.2')) # 输出为False
这就让人特别疑惑了,在网上没找到答案,请高手指导!
更新:
还有个问题请教下,
a=0.3-0.1,print(a)输出0.19999999999999998;b=0.2,
但是print('%s==%s'%(a,b))却输出的是 0.2==0.2,
这里为什么在格式化字符串的时候,a由0.19999999999999998变成了0.2呢?
一般在计算机里不能直接用
==
比较2个浮点数是否相等。因为浮点数值在计算机存在误差。
python有
decimal
和fraction
2个模块用来进行高精度浮点计算。例子