From e7619fdb3df37b612acfd127e50e6c41dc7b9680 Mon Sep 17 00:00:00 2001 From: mpv Date: Mon, 28 May 2018 13:02:08 +0300 Subject: [PATCH] Fix for the issue #2485 : Float parameter is truncated to its integer value --- .../InitializationPlugin_PyInterp.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/InitializationPlugin/InitializationPlugin_PyInterp.cpp b/src/InitializationPlugin/InitializationPlugin_PyInterp.cpp index e148bdf17..e3cce6120 100644 --- a/src/InitializationPlugin/InitializationPlugin_PyInterp.cpp +++ b/src/InitializationPlugin/InitializationPlugin_PyInterp.cpp @@ -22,6 +22,7 @@ #include #include +#include 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; } -- 2.30.2