Skip to content

Commit

Permalink
🐛 fixing #359
Browse files Browse the repository at this point in the history
  • Loading branch information
nlohmann committed Nov 21, 2016
1 parent 0d72767 commit 43dbe02
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 46 deletions.
25 changes: 2 additions & 23 deletions src/json.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,26 +122,6 @@ struct has_mapped_type
std::is_integral<decltype(detect(std::declval<T>()))>::value;
};

/*!
@brief helper class to create locales with decimal point
This struct is used a default locale during the JSON serialization. JSON
requires the decimal point to be `.`, so this function overloads the
`do_decimal_point()` function to return `.`. This function is called by
float-to-string conversions to retrieve the decimal separator between integer
and fractional parts.
@sa https://github.com/nlohmann/json/issues/51#issuecomment-86869315
@since version 2.0.0
*/
struct DecimalSeparator : std::numpunct<char>
{
char do_decimal_point() const
{
return '.';
}
};

}

/*!
Expand Down Expand Up @@ -2201,8 +2181,7 @@ class basic_json
{
std::stringstream ss;
// fix locale problems
const static std::locale loc(std::locale(), new DecimalSeparator);
ss.imbue(loc);
ss.imbue(std::locale::classic());

// 6, 15 or 16 digits of precision allows round-trip IEEE 754
// string->float->string, string->double->string or string->long
Expand Down Expand Up @@ -5829,7 +5808,7 @@ class basic_json
o.width(0);

// fix locale problems
const auto old_locale = o.imbue(std::locale(std::locale(), new DecimalSeparator));
const auto old_locale = o.imbue(std::locale::classic());
// set precision

// 6, 15 or 16 digits of precision allows round-trip IEEE 754
Expand Down
25 changes: 2 additions & 23 deletions src/json.hpp.re2c
Original file line number Diff line number Diff line change
Expand Up @@ -122,26 +122,6 @@ struct has_mapped_type
std::is_integral<decltype(detect(std::declval<T>()))>::value;
};

/*!
@brief helper class to create locales with decimal point

This struct is used a default locale during the JSON serialization. JSON
requires the decimal point to be `.`, so this function overloads the
`do_decimal_point()` function to return `.`. This function is called by
float-to-string conversions to retrieve the decimal separator between integer
and fractional parts.

@sa https://github.com/nlohmann/json/issues/51#issuecomment-86869315
@since version 2.0.0
*/
struct DecimalSeparator : std::numpunct<char>
{
char do_decimal_point() const
{
return '.';
}
};

}

/*!
Expand Down Expand Up @@ -2201,8 +2181,7 @@ class basic_json
{
std::stringstream ss;
// fix locale problems
const static std::locale loc(std::locale(), new DecimalSeparator);
ss.imbue(loc);
ss.imbue(std::locale::classic());

// 6, 15 or 16 digits of precision allows round-trip IEEE 754
// string->float->string, string->double->string or string->long
Expand Down Expand Up @@ -5829,7 +5808,7 @@ class basic_json
o.width(0);

// fix locale problems
const auto old_locale = o.imbue(std::locale(std::locale(), new DecimalSeparator));
const auto old_locale = o.imbue(std::locale::classic());
// set precision

// 6, 15 or 16 digits of precision allows round-trip IEEE 754
Expand Down

0 comments on commit 43dbe02

Please sign in to comment.