Commit 6a108bb8 authored by Niels's avatar Niels

Merge branch 'feature/issue272' into develop

parents 360f0f37 7214243d
...@@ -2097,6 +2097,8 @@ class basic_json ...@@ -2097,6 +2097,8 @@ class basic_json
string_t dump(const int indent = -1) const string_t dump(const int indent = -1) const
{ {
std::stringstream ss; std::stringstream ss;
// fix locale problems
ss.imbue(std::locale(std::locale(), new DecimalSeparator));
if (indent >= 0) if (indent >= 0)
{ {
...@@ -5655,9 +5657,14 @@ class basic_json ...@@ -5655,9 +5657,14 @@ class basic_json
// reset width to 0 for subsequent calls to this stream // reset width to 0 for subsequent calls to this stream
o.width(0); o.width(0);
// fix locale problems
auto old_locale = o.imbue(std::locale(std::locale(), new DecimalSeparator));
// do the actual serialization // do the actual serialization
j.dump(o, pretty_print, static_cast<unsigned int>(indentation)); j.dump(o, pretty_print, static_cast<unsigned int>(indentation));
// reset locale
o.imbue(old_locale);
return o; return o;
} }
...@@ -6128,11 +6135,8 @@ class basic_json ...@@ -6128,11 +6135,8 @@ class basic_json
// string->double->string or string->long // string->double->string or string->long
// double->string; to be safe, we read this value from // double->string; to be safe, we read this value from
// std::numeric_limits<number_float_t>::digits10 // std::numeric_limits<number_float_t>::digits10
std::stringstream ss; o << std::setprecision(std::numeric_limits<double>::digits10)
ss.imbue(std::locale(std::locale(), new DecimalSeparator)); // fix locale problems << m_value.number_float;
ss << std::setprecision(std::numeric_limits<double>::digits10)
<< m_value.number_float;
o << ss.str();
} }
return; return;
} }
......
...@@ -2097,6 +2097,8 @@ class basic_json ...@@ -2097,6 +2097,8 @@ class basic_json
string_t dump(const int indent = -1) const string_t dump(const int indent = -1) const
{ {
std::stringstream ss; std::stringstream ss;
// fix locale problems
ss.imbue(std::locale(std::locale(), new DecimalSeparator));
if (indent >= 0) if (indent >= 0)
{ {
...@@ -5655,9 +5657,14 @@ class basic_json ...@@ -5655,9 +5657,14 @@ class basic_json
// reset width to 0 for subsequent calls to this stream // reset width to 0 for subsequent calls to this stream
o.width(0); o.width(0);
// fix locale problems
auto old_locale = o.imbue(std::locale(std::locale(), new DecimalSeparator));
// do the actual serialization // do the actual serialization
j.dump(o, pretty_print, static_cast<unsigned int>(indentation)); j.dump(o, pretty_print, static_cast<unsigned int>(indentation));
// reset locale
o.imbue(old_locale);
return o; return o;
} }
...@@ -6128,11 +6135,8 @@ class basic_json ...@@ -6128,11 +6135,8 @@ class basic_json
// string->double->string or string->long // string->double->string or string->long
// double->string; to be safe, we read this value from // double->string; to be safe, we read this value from
// std::numeric_limits<number_float_t>::digits10 // std::numeric_limits<number_float_t>::digits10
std::stringstream ss; o << std::setprecision(std::numeric_limits<double>::digits10)
ss.imbue(std::locale(std::locale(), new DecimalSeparator)); // fix locale problems << m_value.number_float;
ss << std::setprecision(std::numeric_limits<double>::digits10)
<< m_value.number_float;
o << ss.str();
} }
return; return;
} }
......
...@@ -14079,6 +14079,16 @@ TEST_CASE("regression tests") ...@@ -14079,6 +14079,16 @@ TEST_CASE("regression tests")
CHECK(j1a.dump() == "23.42"); CHECK(j1a.dump() == "23.42");
CHECK(j1b.dump() == "23.42"); CHECK(j1b.dump() == "23.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 << j1a;
CHECK(ss.str() == "47,1123.42");
ss << 47.11;
CHECK(ss.str() == "47,1123.4247,11");
CHECK(j2a.dump() == "23.42"); CHECK(j2a.dump() == "23.42");
//issue #230 //issue #230
//CHECK(j2b.dump() == "23.42"); //CHECK(j2b.dump() == "23.42");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment