测试Lua数字是整数还是浮点 在我的C++程序中,我需要知道一个LUA变量是整数还是浮点数。C API提供了lua\u isnumber(),但此函数不区分int/float/double
到目前为止,我已经通过使用测试Lua数字是整数还是浮点 在我的C++程序中,我需要知道一个LUA变量是整数还是浮点数。C API提供了lua\u isnumber(),但此函数不区分int/float/double,c++,lua,lua-api,C++,Lua,Lua Api,到目前为止,我已经通过使用modf()解决了这个问题: if(lua_isnumber(luaCtx,-1))//int/unsigned int/float: { luaVarName=lua_tostring(luaCtx,-2); 双n=静态施法(lua\U tonumber(luaCtx,-1)); //计算整型还是浮点型: 双分形零件,内部零件; fractPart=modf(n,&intPart); 如果(分形部分!=0.0) { luaVarType=ScriptVar::Type
modf()
解决了这个问题:
if(lua_isnumber(luaCtx,-1))//int/unsigned int/float:
{
luaVarName=lua_tostring(luaCtx,-2);
双n=静态施法(lua\U tonumber(luaCtx,-1));
//计算整型还是浮点型:
双分形零件,内部零件;
fractPart=modf(n,&intPart);
如果(分形部分!=0.0)
{
luaVarType=ScriptVar::TypeTag::Float;
luaVarData.asFloat=静态_铸造(n);
}
其他的
{
luaVarType=ScriptVar::TypeTag::Integer;
luaVarData.asInteger=静态铸件(n);
}
}
LuaAPI是否提供了一种更精确地推断变量类型的方法
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来说,唯一存在的数字是双精度的。因此,当将一个数字从lua转换为C时,如果该数字是整数(整数),我们可以选择使用int
这段代码只是检查n是否有小数。
如果n为1.5,则将其强制转换为int((int)n)将使值下限为1,因此:
1.5==1为假,n为双精度
但如果n为4:
4==4为真,n为整数
这是因为对于lua来说,唯一存在的数字是双精度的。因此,当将一个数字从lua转换为C时,如果该数字是整数(整数),我们可以选择使用int。您可以使用
lua\u-tounsigned
或lua\u-checkunsigned
将其强制转换为无符号类型。否则,您必须像以前一样强制转换它。Lua5.3将同时具有整数和浮点类型。No。您可以使用lua\u-tounsigned
或lua\u-checkunsigned
将其强制转换为无符号类型。否则,您必须像以前一样强制转换它。Lua5.3将同时具有整数和浮点类型。这个答案可以删除。很难说这是不是一个高质量的答案。你能解释一下吗?好的,没有关于数字的额外信息,你必须自己检查。使用类型cast/floor()
等就足够简单了。这个答案可以删除了。很难说这是不是一个高质量的答案。你能解释一下吗?好的,没有关于数字的额外信息,你必须自己检查。使用类型cast/floor()
等就足够简单了。
double n = lua_tonumber(L, -1);
if (n == (int)n) {
// n is an int
} else {
// n is a double
}