diff --git a/lua/lua.c b/lua/lua.c index a418265..2222d40 100644 --- a/lua/lua.c +++ b/lua/lua.c @@ -92,7 +92,7 @@ static char *trim(char *str) return str; } -static void print_number_fixed3(double num) +void print_number_fixed3(double num) { if (NULL == lua_print) return; diff --git a/lua/lua_base.h b/lua/lua_base.h index 9a85c49..7ab7aa0 100644 --- a/lua/lua_base.h +++ b/lua/lua_base.h @@ -99,6 +99,8 @@ extern lua_output lua_print; * routines' or functions' implementations * *----------------------------------------------*/ int lua_init(lua_output _lua_print); +/* 拆分整数/小数部分打印浮点数(保留小数点后三位),不依赖 printf 的 %f/%g(适用于无浮点打印支持的平台) */ +void print_number_fixed3(double num); int lua_repl(char *_pcBuffer, int _iSize, int _iEcho); void luaprint_stdout(const char *fmt, ...); void lua_register_help(lua_State *L, const char *name, lua_CFunction func, const char *description); diff --git a/lua/pb_lua.c b/lua/pb_lua.c index 1fc7369..271d507 100644 --- a/lua/pb_lua.c +++ b/lua/pb_lua.c @@ -357,7 +357,7 @@ static void pb_lua_dump_msg_fields(const void *msg, const pb_lua_msg_t *m, int d case PB_LUA_T_DOUBLE: { double v; memcpy(&v, p, sizeof(v)); - lua_print("%g", v); + print_number_fixed3(v); break; } case PB_LUA_T_STRING: { @@ -424,7 +424,7 @@ static void pb_lua_dump_table_fields(lua_State *L, int tidx, const pb_lua_msg_t else if (lua_isinteger(L, -1)) lua_print("%d", lua_tointeger(L, -1)); else if (lua_isnumber(L, -1)) - lua_print("%g", (double)lua_tonumber(L, -1)); + print_number_fixed3((double)lua_tonumber(L, -1)); else if (lua_isboolean(L, -1)) lua_print("%s", lua_toboolean(L, -1) ? "true" : "false"); else @@ -458,10 +458,10 @@ static void pb_lua_dump_value(lua_State *L, int vidx, const pb_lua_field_t *f, i if (lua_isinteger(L, vidx)) lua_print("%d", lua_tointeger(L, vidx)); else - lua_print("%g", (double)lua_tonumber(L, vidx)); + print_number_fixed3((double)lua_tonumber(L, vidx)); break; case PB_LUA_T_DOUBLE: - lua_print("%g", (double)lua_tonumber(L, vidx)); + print_number_fixed3((double)lua_tonumber(L, vidx)); break; case PB_LUA_T_STRING: lua_print("\"%s\"", lua_tostring(L, vidx));