Lua(5.1.5) の文字列を整数に変換し、数値が有効な整数 (0~99999) かどうかを確認しようとしました。ただし、大きな整数を扱う場合、lua_tonumber() は lua_tointeger() とは異なる動作をすることがわかりました。
int main()
{
int in;
double db;
lua_State* Lua = luaL_newstate();
luaL_openlibs(Lua);
lua_pushstring(Lua, "213232127162767162736718238168263816873");
db = lua_tonumber(Lua, -1);
in = lua_tointeger(Lua, -1);
printf("DOUBLE:%f\n", db); // DOUBLE:213232127162767176000119210017101447168.000000
printf("INT:%d\n", in); // INT:0
};
lua_tointeger() を使用すると、0 が返され、チェックに合格します。
両方の API の説明を確認しましたが、動作が異なる理由はまだわかりません。これらの動作はマシンに依存しませんか? lua_tonumber() を使用する方が良いですか?
次のコードを使用して結果を確認できますか? (クロスプラットフォーム)
if (!lua_isnumber(Lua, -1)) { //error }
result = lua_tonumber(Lua, -1);
if (result < 0 || result > 99999) { // error2 }
// pass