在我的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是否提供了更精确地推断变量类型的方法?
答案 0 :(得分:5)
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为int
这是有效的,因为对于lua,唯一存在的数字是double。因此,当将数字从lua转换为C时,如果数字是整数(整数),我们可以选择使用int。