diff --git a/src/json.hpp b/src/json.hpp
index 03df7426..08b95cdb 100644
--- a/src/json.hpp
+++ b/src/json.hpp
@@ -8298,25 +8298,7 @@ class basic_json
 
             snprintf(m_buf.data(), m_buf.size(), fmt, x);
 
-#if 0
-            // C locales and C++ locales are similar but
-            // different.
-            //
-            // If working with C++ streams we'd've used
-            // these, but for C formatting functions we
-            // have to use C locales (setlocale / localeconv),
-            // rather than C++ locales (std::locale installed
-            // by std::locale::global()).
-            const std::locale loc;
-
-            const char thousands_sep =
-                std::use_facet< std::numpunct<char>>(
-                    loc).thousands_sep();
-
-            const char decimal_point =
-                std::use_facet< std::numpunct<char>>(
-                    loc).decimal_point();
-#else
+            // read information from locale
             const auto loc = localeconv();
             assert(loc != nullptr);
             const char thousands_sep = !loc->thousands_sep ? '\0'
@@ -8324,7 +8306,6 @@ class basic_json
 
             const char decimal_point = !loc->decimal_point ? '\0'
                                        : loc->decimal_point[0];
-#endif
 
             // erase thousands separator
             if (thousands_sep != '\0')
diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c
index bf7f380a..050b0b6b 100644
--- a/src/json.hpp.re2c
+++ b/src/json.hpp.re2c
@@ -8298,25 +8298,7 @@ class basic_json
 
             snprintf(m_buf.data(), m_buf.size(), fmt, x);
 
-#if 0
-            // C locales and C++ locales are similar but
-            // different.
-            //
-            // If working with C++ streams we'd've used
-            // these, but for C formatting functions we
-            // have to use C locales (setlocale / localeconv),
-            // rather than C++ locales (std::locale installed
-            // by std::locale::global()).
-            const std::locale loc;
-
-            const char thousands_sep =
-                std::use_facet< std::numpunct<char>>(
-                    loc).thousands_sep();
-
-            const char decimal_point =
-                std::use_facet< std::numpunct<char>>(
-                    loc).decimal_point();
-#else
+            // read information from locale
             const auto loc = localeconv();
             assert(loc != nullptr);
             const char thousands_sep = !loc->thousands_sep ? '\0'
@@ -8324,7 +8306,6 @@ class basic_json
 
             const char decimal_point = !loc->decimal_point ? '\0'
                                        : loc->decimal_point[0];
-#endif
 
             // erase thousands separator
             if (thousands_sep != '\0')
diff --git a/test/src/unit-regression.cpp b/test/src/unit-regression.cpp
index f998fcb9..29ca82ec 100644
--- a/test/src/unit-regression.cpp
+++ b/test/src/unit-regression.cpp
@@ -361,8 +361,8 @@ TEST_CASE("regression tests")
 
     SECTION("issue #228 - double values are serialized with commas as decimal points")
     {
-        json j1a = 23.42;
-        json j1b = json::parse("23.42");
+        json j1a = 2312.42;
+        json j1b = json::parse("2312.42");
 
         json j2a = 2342e-2;
         //issue #230
@@ -380,23 +380,33 @@ TEST_CASE("regression tests")
             {
                 return ',';
             }
+
+            char do_thousands_sep() const
+            {
+                return '.';
+            }
+            
+            std::string do_grouping() const
+            {
+                return "\03";
+            }
         };
 
         // change locale to mess with decimal points
         auto orig_locale = std::locale::global(std::locale(std::locale(), new CommaDecimalSeparator));
 
-        CHECK(j1a.dump() == "23.42");
-        CHECK(j1b.dump() == "23.42");
+        CHECK(j1a.dump() == "2312.42");
+        CHECK(j1b.dump() == "2312.42");
 
         // check if locale is properly reset
         std::stringstream ss;
         ss.imbue(std::locale(std::locale(), new CommaDecimalSeparator));
-        ss << 47.11;
-        CHECK(ss.str() == "47,11");
+        ss << 4712.11;
+        CHECK(ss.str() == "4.712,11");
         ss << j1a;
-        CHECK(ss.str() == "47,1123.42");
+        CHECK(ss.str() == "4.712,112312.42");
         ss << 47.11;
-        CHECK(ss.str() == "47,1123.4247,11");
+        CHECK(ss.str() == "4.712,112312.4247,11");
 
         CHECK(j2a.dump() == "23.42");
         //issue #230