关于eilf和if结果不等问题,或是浮点型精度问题?

在运行一个血条代码的时候出血了一点问题

    def__init__(self):
        self.hp = 玩家当前生命值
        self.max_hp =  玩家最大生命值
        self.hpAni = self.hp/self.max_hp
    def HP_Bar(self):
        if 玩家当前生命值 != self.hp or 玩家最大生命值 != self.max_hp:  # 最大生命值或当前生命值改变时触发
            self.hp = 玩家当前生命值
            self.max_hp = 玩家最大生命值
            self.hpPercent = float(self.hp) / float(self.max_hp)  # 当前血量百分比

        if self.hpAni > self.hpPercent:
            self.hpAni -= 0.01
            self.GetBaseUIControl(self.hp_bar).asProgressBar().SetValue(self.hpAni)

        elif self.hpAni < self.hpPercent:
            self.hpAni += 0.01
            self.GetBaseUIControl(self.hp_bar).asProgressBar().SetValue(self.hpAni)

这是一个一秒执行30次的函数,一直就是动态刷新血条
可是不知道为什么后面两个if,elif会不断跳入
造成血条+0.01 -0.01

当我把elif改成if就正常了

请问有知道为什么的吗

elif是针对统计的if而言的,如果全部都是if,代码会逐个进行判断是否满足

如果存在elif,那么只会选择第一个逻辑值为true的运行,且后续不再进行判断
逻辑就在这里

elif 与 之前的if构成配对,相当于 else if,执行else中的条件(不满足if的条件)

if 与 之前的if是平等关系,不论之前的if 是否执行,当前的if都会执行并判断