Browse Source

【支线待合】解决MCU下打印浮点数有问题的情况

master
Lizongdi 1 week ago
parent
commit
bfc8c76a4c
  1. 2
      lua/lua.c
  2. 2
      lua/lua_base.h
  3. 8
      lua/pb_lua.c

2
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;

2
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);

8
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));

Loading…
Cancel
Save