测试Lua数是整数还是浮点数

gla*_*ert 1 c++ lua lua-api

在我的C++程序中,我需要知道Lua变量是整数还是浮点数.C API提供lua_isnumber()但此功能不区分int/float/double.

到目前为止,我使用modf()以下方法解决了这个问题

if (lua_isnumber(luaCtx, -1)) // int / unsigned int / float:
{
    luaVarName = lua_tostring(luaCtx, -2);
    double n = static_cast<double>(lua_tonumber(luaCtx, -1));

    // Figure out if int or float:
    double fractPart, intPart;
    fractPart = modf(n, &intPart);

    if (fractPart != 0.0)
    {
        luaVarType = ScriptVar::TypeTag::Float;
        luaVarData.asFloat = static_cast<float>(n);
    }
    else
    {
        luaVarType = ScriptVar::TypeTag::Integer;
        luaVarData.asInteger = static_cast<int>(n);
    }
}
Run Code Online (Sandbox Code Playgroud)

Lua API是否提供了更精确地推断变量类型的方法?

小智 5

double n = lua_tonumber(L, -1);
if (n == (int)n) {
    // n is an int
} else {
    // n is a double
}
Run Code Online (Sandbox Code Playgroud)

这段代码的作用就是检查n是否有任何小数.如果n为1.5,则将其转换为int((int)n)将该值置为1,因此:

1.5 == 1是假,n是双

但如果n是4:

4 == 4为真,n为int

这是有效的,因为对于lua,唯一存在的数字是double.因此,当将数字从lua转换为C时,如果数字是整数(整数),我们可以选择使用int.

  • 这个答案可以删除。很难说这是否是一个高质量的答案。你能解释一下吗? (2认同)