Salome HOME
Fix for the issue #2485 : Float parameter is truncated to its integer value
authormpv <mpv@opencascade.com>
Mon, 28 May 2018 10:02:08 +0000 (13:02 +0300)
committermpv <mpv@opencascade.com>
Mon, 28 May 2018 10:02:08 +0000 (13:02 +0300)
src/InitializationPlugin/InitializationPlugin_PyInterp.cpp

index e148bdf17d650815e56770698c714bf9a1774b7c..e3cce6120e3186dee0f8d45d0dbcdd559efc0ba6 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <string>
 #include <stdexcept>
+#include <clocale>
 
 InitializationPlugin_PyInterp::InitializationPlugin_PyInterp()
 : PyInterp_Interp()
@@ -169,8 +170,13 @@ double InitializationPlugin_PyInterp::evaluate(const std::string& theExpression,
   Py_XDECREF(anEvalStrObj);
   double result = 0.;
   try {
+    // set locale due to the #2485
+    std::string aCurLocale = std::setlocale(LC_NUMERIC, 0);
+    std::setlocale(LC_NUMERIC, "C");
     result = std::stod(anEvalStr);
-  } catch (const std::invalid_argument&) {
+    std::setlocale(LC_NUMERIC, aCurLocale.c_str());
+  }
+  catch (const std::invalid_argument&) {
     theError = "Unable to eval " + anEvalStr;
   }