Problema com o método luaL_checknumber

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Problema com o método luaL_checknumber

Toninho
Olá a todos,

Tenho um script em Lua que configura algumas coisas de uma aplicação. O problema é que quando
um número possui muitas casas decimais, Lua trunca considerando apenas 6 casas decimais (como abaixo)
Já alterei o Lua para a versão 5.2.1 mas o problema ainda persiste.

Alguem te ideia sobre o que possa ser?
Abaixo tem um exemplo do script Lua e do código C++.



Lua Script                        C++ enviroment
      3.141595                      
   3.14159                      
      1.25992104                     1.25992
      0.629960524                   0.629961
 5793.33036243                5793.33



Lua Code
(...)
   -- precision = 8 -- decimal places
   dt = 1 / 240
   PI = 3.141592653589
   -- ex = 2.71828182845904
   ar = (1 + math.sqrt(5))/2
   integrationMethod = "euler"
(...)


C++ Code
    int Pos = lua_gettop(luaL);
    lua_pushnil(luaL);
    while(lua_next(luaL, cellsPos ) != 0)
       {
            key = luaL_checkstring(luaL, -2);

            if (keyList.contains(key) )
            {
                switch( lua_type(luaL, -1) )
                {
                case LUA_TBOOLEAN:
                    boolValue = lua_toboolean(luaL, -1);
                    (...)                   
                    break;

                case LUA_TNUMBER:
                    numValue = luaL_checknumber(luaL, -1); <== recupera um valor númerico truncado
                    (...)
                    break;

                case LUA_TSTRING:
                    strValue = luaL_checkstring(luaL, -1);
                    (...)
                    break;
             }
       }


----

Obrigado,

Antônio José

--
Lua BR - http://groups.google.com/group/lua-br
Reply | Threaded
Open this post in threaded view
|

Re: Problema com o método luaL_checknumber

Luiz Henrique de Figueiredo
Lua nunca trunca números. O que parece estar acontecendo é que você está
mostrando números em C++ usando o default "cout << x". Acho que nesse caso,
C++ usa o equivalent a %g, que sim limita o número de dígitos mostrado.

--
Lua BR - http://groups.google.com/group/lua-br