Karson CN 2022-05-02 12:03 采纳率: 0%
浏览 18

关于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就正常了

请问有知道为什么的吗

  • 写回答

2条回答 默认 最新

  • 不会长胖的斜杠 后端领域新星创作者 2022-05-02 12:22
    关注

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

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

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月2日

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?