测试 Lua 数字是否为整数或浮点数

在我的 C++ 程序中,我需要知道 Lua 变量是整数还是浮点数。C API 提供了 lua_isnumber(),但是这个函数没有区分 int / float / double

到目前为止,我通过使用 modf() 来解决这个问题:

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

    了解 int 还是 float:
    双倍 fractPart,intPart;
    fractPart = modf(n,&intPart);

    如果(fractPart!= 0.0)
    {
        luaVarType = ScriptVar :: TypeTag :: Float;
        luaVarData.asFloat = static_cast<float>(n);
    }
    别的
    {
        luaVarType = ScriptVar :: TypeTag :: Integer;
        luaVarData.asInteger = static_cast<int>(n);
    }
}

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

点赞
用户3920882
用户3920882
double n = lua_tonumber(L, -1);
if (n == (int)n) {
    // n 是整数
} else {
    // n 是浮点数
}

这段代码所做的就是检查 n 是否有小数。 如果 n 是 1.5,那么将其转换为 int ((int) n) 将会向下取整为 1,因此:

1.5 == 1 是 false,n 是浮点数

但如果 n 是 4:

4 == 4 是 true,n 是整数

这个代码之所以能用,是因为对于 Lua 来说,存在的唯一数值类型是 double。因此,当将一个数值从 Lua 转换为 C 时,我们可以选择在该数为整数(即没有小数部分)时使用 int。

2014-08-08 04:52:56