Просмотр исходного кода

fix: json库在浮点数0.0的时候会变成科学计数法 https://gitee.com/openLuat/luatos-soc-2022/issues/I6R3W9

Wendal Chen 2 лет назад
Родитель
Сommit
af0cf3f27d
1 измененных файлов с 13 добавлено и 9 удалено
  1. 13 9
      components/lua-cjson/lua_cjson.c

+ 13 - 9
components/lua-cjson/lua_cjson.c

@@ -54,6 +54,7 @@
 #include "strbuf.h"
 #include "fpconv.h"
 #include "printf.h"
+#include "float.h"
 
 #define MIN_OPT_LEVEL 2
 
@@ -604,15 +605,18 @@ static void json_append_number(lua_State *l,
         #endif
     }
     else {
-        len = snprintf_(strbuf_empty_ptr(json), FPCONV_G_FMT_BUFSIZE, float_fmt, lua_tonumber(l, lindex));
-        // if (json_easy_config.encode_number_precision_mode == 'f')
-        // {
-        // 	len = fpconv_f_fmt(strbuf_empty_ptr(json), num, json_easy_config.encode_number_precision);
-        // }
-        // else
-        // {
-        // 	len = fpconv_g_fmt(strbuf_empty_ptr(json), num, json_easy_config.encode_number_precision);
-        // }
+        lua_Number v = lua_tonumber(l, lindex);
+        #ifdef LUAT_CONF_VM_64bit
+        if (v <= DBL_EPSILON  && v >= -DBL_EPSILON) {
+        #else
+        if (v <= FLT_EPSILON  && v >= -FLT_EPSILON) {
+        #endif
+            memcpy(strbuf_empty_ptr(json), "0.0\x00", 4);
+            len = 1;
+        }
+        else {
+            len = snprintf_(strbuf_empty_ptr(json), FPCONV_G_FMT_BUFSIZE, float_fmt, v);
+        }
     }
     //len = fpconv_g_fmt(strbuf_empty_ptr(json), num, DEFAULT_ENCODE_NUMBER_PRECISION);
     strbuf_extend_length(json, len);