commit 5bd14af8871b8f87c2c73ca8392b7c72217ad72d
Author: Enrico Forestieri <for...@lyx.org>
Date:   Sat Jul 12 19:12:08 2014 +0200

    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).

diff --git a/src/support/convert.cpp b/src/support/convert.cpp
index 70cd91e..6b985f5 100644
--- a/src/support/convert.cpp
+++ b/src/support/convert.cpp
@@ -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();
 }
 
 

Reply via email to