Fix bugs 9190 and 9193.

The conversion from floating point to string performed by
boost:lexical_cast does not allow specifying a precision and,
for example, values such as 0.9 are returned as 0.899999976.
The standard C++ way for performing the conversion is using
std::ostringstream which is exempt from this problem, even if
less efficient. For the sake of accuracy, boost::lexical_cast
is ditched in favor of the ostrinsgstream implementation.
In C++11 another option would be using std::to_string, but I
think it is not as efficient as the boost way and not worth
implementing through #ifdef's.
This commit is contained in:
Enrico Forestieri 2014-07-28 00:33:13 +02:00
parent edddfb99fc
commit 5f7948e5a5
2 changed files with 10 additions and 2 deletions

View File

@ -17,6 +17,7 @@
#include <boost/lexical_cast.hpp>
#include <string>
#include <sstream>
//needed for Mac OSX 10.5.2 Leopard
#include <cstdlib>
@ -106,14 +107,18 @@ docstring convert<docstring>(long l)
template<>
string convert<string>(float f)
{
return lexical_cast<string>(f);
std::ostringstream val;
val << f;
return val.str();
}
template<>
string convert<string>(double d)
{
return lexical_cast<string>(d);
std::ostringstream val;
val << d;
return val.str();
}

View File

@ -87,6 +87,9 @@ What's new
- Fix potential bug spotted by cppcheck.
- Fix problems arising when converting floating point values to the
corresponding string representation (bugs 9190 and 9193).
* DOCUMENTATION AND LOCALIZATION