diff --git a/src/json.hpp b/src/json.hpp
index 3e5a45cf..5cf06249 100644
--- a/src/json.hpp
+++ b/src/json.hpp
@@ -6648,7 +6648,8 @@ class basic_json
             {
                 const auto end = std::remove(m_buf.begin(), m_buf.begin() + written_bytes, thousands_sep);
                 std::fill(end, m_buf.end(), '\0');
-                written_bytes -= (m_buf.end() - end);
+                assert((end - m_buf.begin()) <= written_bytes);
+                written_bytes = (end - m_buf.begin());
             }
 
             // convert decimal point to '.'
diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c
index e648b41b..c7784266 100644
--- a/src/json.hpp.re2c
+++ b/src/json.hpp.re2c
@@ -6648,7 +6648,8 @@ class basic_json
             {
                 const auto end = std::remove(m_buf.begin(), m_buf.begin() + written_bytes, thousands_sep);
                 std::fill(end, m_buf.end(), '\0');
-                written_bytes -= (m_buf.end() - end);
+                assert((end - m_buf.begin()) <= written_bytes);
+                written_bytes = (end - m_buf.begin());
             }
 
             // convert decimal point to '.'