From f47882194c083fb1b81a61860b2180d1edf7163a Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 3 Dec 2023 04:27:43 +0300 Subject: [PATCH] Fixed json/toml float precision on write --- src/coders/json.cpp | 3 +++ src/coders/toml.cpp | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/coders/json.cpp b/src/coders/json.cpp index 971e7cc1..29b9201c 100644 --- a/src/coders/json.cpp +++ b/src/coders/json.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include "commons.h" @@ -70,6 +71,8 @@ void stringify(Value* value, } else if (value->type == valtype::boolean) { ss << (value->value.boolean ? "true" : "false"); } else if (value->type == valtype::number) { + ss << std::fixed; + ss << std::setprecision(15); ss << value->value.decimal; } else if (value->type == valtype::integer) { ss << value->value.integer; diff --git a/src/coders/toml.cpp b/src/coders/toml.cpp index 3f5ee332..4981eaa6 100644 --- a/src/coders/toml.cpp +++ b/src/coders/toml.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include @@ -96,7 +97,10 @@ std::string Wrapper::write() const { break; case fieldtype::ftint: ss << *((int*)field->ptr); break; case fieldtype::ftuint: ss << *((uint*)field->ptr); break; - case fieldtype::ftfloat: ss << *((float*)field->ptr); break; + case fieldtype::ftfloat: + ss << std::fixed; + ss << std::setprecision(15); + ss << *((float*)field->ptr); break; case fieldtype::ftstring: ss << escape_string(*((const string*)field->ptr)); break;