gpt4 book ai didi

c++ - 测试 Lua 数是整数还是 float

转载 作者:行者123 更新时间:2023-11-30 01:17:08 27 4
gpt4 key购买 nike

在我的 C++ 程序中,我需要知道 Lua 变量是整数还是 float 。 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 为 false,n 为 double

但是如果 n 是 4:

4 == 4 为真,n 为 int

这是可行的,因为对于 lua,唯一存在的数字是 double 。所以当从 lua 到 C 转换数字时,如果数字是整数(整数),我们可以选择使用 int。

关于c++ - 测试 Lua 数是整数还是 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25196042/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com