From e58aeff5e2709fb893a22328442bdbd3a5c76851 Mon Sep 17 00:00:00 2001 From: Matt Borland Date: Fri, 21 Apr 2023 14:44:23 +0200 Subject: [PATCH] Fix memmove offset and missing trailing zeros --- src/to_chars.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/to_chars.cpp b/src/to_chars.cpp index d84caeb..eb839e0 100644 --- a/src/to_chars.cpp +++ b/src/to_chars.cpp @@ -82,7 +82,7 @@ boost::charconv::to_chars_result boost::charconv::to_chars(char* first, char* la { if (fmt == boost::charconv::chars_format::general || fmt == boost::charconv::chars_format::fixed) { - const auto abs_value = std::abs(value); + auto abs_value = std::abs(value); if (abs_value >= 1 && abs_value < 1e16) { auto value_struct = boost::charconv::detail::to_decimal(value); @@ -103,6 +103,13 @@ boost::charconv::to_chars_result boost::charconv::to_chars(char* first, char* la { std::memmove(r.ptr + value_struct.exponent + 1, r.ptr + value_struct.exponent, -value_struct.exponent); std::memset(r.ptr + value_struct.exponent, '.', 1); + r.ptr -= value_struct.exponent; + } + + while (std::fmod(abs_value, 10) == 0) + { + *r.ptr++ = '0'; + abs_value /= 10; } return { r.ptr, 0 };