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.
#include <boost/lexical_cast.hpp>
#include <string>
+#include <sstream>
//needed for Mac OSX 10.5.2 Leopard
#include <cstdlib>
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();
}
- 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