From b372611e86d9c4c44552f4655a1c7fed603dabfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=B3=B0?= Date: Mon, 30 Jan 2023 10:50:23 +0800 Subject: [PATCH] fix(json_render): json_render is not accurate enough for extremely small numbers. eg: fmt::format_to(std::back_inserter(buffer), FMT_COMPILE({}), double(0.0000000000017114087924596788)); you will get a result of 1.7114087924, this is a completely wrong result. --- include/util/json_renderer.hpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/util/json_renderer.hpp b/include/util/json_renderer.hpp index 8665c0fb6..f397a6e4a 100644 --- a/include/util/json_renderer.hpp +++ b/include/util/json_renderer.hpp @@ -56,7 +56,10 @@ template struct Renderer size_t decimalpos = std::find(buffer.begin(), buffer.end(), '.') - buffer.begin(); if (buffer.size() > (decimalpos + 10)) { - buffer.resize(decimalpos + 10); + buffer.clear(); + fmt::format_to(std::back_inserter(buffer), FMT_COMPILE("{0:.10f}"), number.value); + + // buffer.resize(decimalpos + 10); } write(buffer.data(), buffer.size());