Merge branch 'feature/issue272' into develop
This commit is contained in:
commit
6a108bb84b
3 changed files with 28 additions and 10 deletions
12
src/json.hpp
12
src/json.hpp
|
@ -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
|
||||||
|
|
||||||
// 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
|
||||||
// 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
|
|
||||||
ss << std::setprecision(std::numeric_limits<double>::digits10)
|
|
||||||
<< m_value.number_float;
|
<< m_value.number_float;
|
||||||
o << ss.str();
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
// 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
|
||||||
// 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
|
|
||||||
ss << std::setprecision(std::numeric_limits<double>::digits10)
|
|
||||||
<< m_value.number_float;
|
<< m_value.number_float;
|
||||||
o << ss.str();
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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");
|
||||||
|
|
Loading…
Reference in a new issue