python浮点数大小比较

MA5 = round(5.976,2)
MA5_1 = round(6.098,2)
MA10 = round(6.350,2)
MA10_1 = round(6.475,2)

print MA10-MA5
print MA10_1-MA5_1

if MA10-MA5<MA10_1-MA5_1:
print "ccc"

a=0.37
b=0.37
if a<b:
print "ddd"

结果:0.37 0.37 ccc ddd未进入条件。请问这是怎么回事,怎么解决比较问题,明明是一样的

你这么提问没法回答,缩进都没有,谁知道你if怎么写的。
先学习下这个:https://blog.csdn.net/askdevteam/article/details/82692845


这很正常,浮点数在计算机里是二进制表示的,10进制能取整的数,比如5.98 6.35等,用二进制表示都是循环小数,有误差。
所以虽然显示的都是0.37和0.37,它们就出现误差了。

好比三进制的0.1 0.2对应10进制的0.3333333.... 0.6666666......
那么三进制的0.1+0.2和1.0比较,虽然都是1.0,但是用10进制计算,就是0.999999....和1.0,前者<后者。

图片说明

是因为round函数的原因么??但是结果明明都是0.37。

图片说明
再看,round保留位数若跟原始数据一致,就没问题。(改了第一个数,是为了确保做减法结果一致)

浮点型都是不精确的表示,就比如比较两浮点相等时会用 |a-b| 结果是
0.3699999999999992
0.3700000000000001
ccc
所以 1.可以用if round(MA10-MA5,2) 或者2.可以用 if abs(MA10-MA5-MA10_1+MA5_1)>0.001:
精确位数0.001自己定