LUA错误尝试将数字与零进行比较

LUA错误尝试将数字与零进行比较,lua,Lua,需要有关生成大量错误的代码的帮助: function() local restedxp = GetXPExhaustion() local totalXP = UnitXPMax("player") local percent = 0 if restedxp > 0 then percent = floor((restedxp / totalXP) * 100) end local ret = string.form

需要有关生成大量错误的代码的帮助:

function()
    local restedxp = GetXPExhaustion()
    local totalXP =  UnitXPMax("player")
    local percent = 0
    if restedxp > 0 then percent = floor((restedxp / totalXP)  * 100) end
    
    local ret = string.format("%s%%", percent)
    return ret
end

错误:尝试将数字与零进行比较

将数字与零进行比较没有意义。因此出现了错误

在您的例子中,在提供的代码中只有一个比较,它是带有

通常,您要做的是找出这两个值中的哪一个为零,并确定原因;或者,如果无法避免该值为零,请确保仅在不为零的情况下进行比较

对你来说,这很简单。转到错误消息中给出的行号。您会发现唯一的条件表达式
restedxp>0
,而as
0
显然是一个数字,它必须是
restedxp
,即
nil

您可以找到restedxp被分配给比较之前的最后一个值的位置

local restedxp = GetXPExhaustion()
因此
getxpehosition()
返回
nil
! 如果您可以访问该函数,您可能可以修复它,或者至少可以找到您是否可以执行任何操作,以使它不会返回
nil

如果您不能为
restedxp
指定一个默认值,例如
0

local restedxp = GetXPExhaustion() or 0
或者避免将值与条件语句进行比较

if type(restedxp) == "number" and restedxp > 0 then
  percent = restedXp // totalXP * 100
end
或者如果您知道restedxp是一个数字或零

if restedxp and restedxp > 0 then
  percent = restedXp // totalXP * 100
end
当然,
totalXP
也是如此。在进行除法之前,还要确保它不是
0

顺便说一句,您的字符串格式不正确

百分比是一个数字,因此您应该使用
%d
而不是
%s
,因为
%s
指的是字符串。它的工作原理是Lua将您的数字转换为字符串,但它不是很干净

选项s需要一个字符串;如果其参数不是字符串,则为 按照tostring的相同规则转换为一个。如果选择 具有任何修饰符(标志、宽度、长度),字符串参数应 不包含嵌入的零


您应该在帖子中包含完整的错误,lua错误通常看起来像
somefile。lua:1:尝试将数字与nil进行比较。您的错误可能是由于
getxpexpeation()
返回零,如果restedxp那么您的检查应该是
,但我不确定您的环境是什么。这是魔兽世界的一个弱点,您是对的。该错误仅在GetXpExpeation()为零时出现。我删除了>0,它可以正常工作。我显然不是程序员。我只是喜欢在别人的工作中闲逛,看看事情是如何运作的。谢谢,非常感谢你的解释。这非常有帮助,更不用说一个聪明的解决方案了