mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-28 20:45:47 +00:00
Fix bug #9193: Spacing modification not exact
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 resturned 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. Incidentally, this patch would have also fixed #9190 and all similar cases involving the use of convert<string>(float|double).
This commit is contained in:
parent
b3735501c7
commit
5bd14af887
@ -17,6 +17,7 @@
|
|||||||
#include <boost/lexical_cast.hpp>
|
#include <boost/lexical_cast.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <sstream>
|
||||||
//needed for Mac OSX 10.5.2 Leopard
|
//needed for Mac OSX 10.5.2 Leopard
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
@ -106,14 +107,18 @@ docstring convert<docstring>(long l)
|
|||||||
template<>
|
template<>
|
||||||
string convert<string>(float f)
|
string convert<string>(float f)
|
||||||
{
|
{
|
||||||
return lexical_cast<string>(f);
|
std::ostringstream val;
|
||||||
|
val << f;
|
||||||
|
return val.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
string convert<string>(double d)
|
string convert<string>(double d)
|
||||||
{
|
{
|
||||||
return lexical_cast<string>(d);
|
std::ostringstream val;
|
||||||
|
val << d;
|
||||||
|
return val.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user