繁体   English   中英

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

[英]Test if Lua number is integer or float

在我的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);
    }
}

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

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

该代码的作用只是检查n是否有小数。 如果n为1.5,则将其强制转换为int((int)n)会将值底限为1,因此:

1.5 == 1为假,n为双精度

但是,如果n为4:

4 == 4为真,n为整数

之所以起作用,是因为lua上唯一存在的数字是double。 因此,当将数字从lua转换为C时,如果数字是整数(整数),我们可以选择使用int。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM