Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
测试Lua数字是整数还是浮点 在我的C++程序中,我需要知道一个LUA变量是整数还是浮点数。C API提供了lua\u isnumber(),但此函数不区分int/float/double_C++_Lua_Lua Api - Fatal编程技术网

测试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
}