Próbowałem konwertować ciąg znaków z Lua (5.1.5) na liczbę całkowitą i sprawdzić, czy liczba jest poprawną liczbą całkowitą (0 ~ 99999). Jednakże, stwierdziłem, że lua_tonumber() ma inne zachowanie niż lua_tointeger(), gdy mamy do czynienia z dużą liczbą całkowitą.Dlaczego lua_tonumber() ma inne zachowanie od lua_tointeger(), gdy mamy do czynienia z dużą liczbą całkowitą?
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
};
Jeśli użyję lua_tointeger(), to zwraca 0 i przejdzie moje sprawdzanie.
Sprawdzam oba opisy API, ale nadal nie wiem, dlaczego mają różne zachowania. Czy te zachowania są niezależne od maszyny? Czy używasz lua_tonumber() w lepszy sposób?
Czy mogę użyć następującego kodu, aby sprawdzić wynik? (I platform)
if (!lua_isnumber(Lua, -1)) { //error }
result = lua_tonumber(Lua, -1);
if (result < 0 || result > 99999) { // error2 }
// pass
liczby całkowite 2 lub 4 bajtów, 'double' ma 8 bajtów. – hjpotter92