|
28 | 28 |
|
29 | 29 | #include "paramsd.h"
|
30 | 30 | #include <cstdio> // for fclose, fopen, fprintf, sprintf, FILE
|
31 |
| -#include <cstdlib> // for atoi, strtod |
| 31 | +#include <cstdlib> // for atoi |
32 | 32 | #include <cstring> // for strcmp, strcspn, strlen, strncpy
|
| 33 | +#include <locale> // for std::locale::classic |
33 | 34 | #include <map> // for map, _Rb_tree_iterator, map<>::iterator
|
34 | 35 | #include <memory> // for unique_ptr
|
| 36 | +#include <sstream> // for std::stringstream |
35 | 37 | #include <utility> // for pair
|
36 | 38 | #include "genericvector.h" // for GenericVector
|
37 | 39 | #include "params.h" // for ParamsVectors, StringParam, BoolParam
|
@@ -158,7 +160,12 @@ void ParamContent::SetValue(const char* val) {
|
158 | 160 | } else if (param_type_ == VT_BOOLEAN) {
|
159 | 161 | bIt->set_value(atoi(val));
|
160 | 162 | } else if (param_type_ == VT_DOUBLE) {
|
161 |
| - dIt->set_value(strtod(val, nullptr)); |
| 163 | + std::stringstream stream(val); |
| 164 | + // Use "C" locale for reading double value. |
| 165 | + stream.imbue(std::locale::classic()); |
| 166 | + double d = 0; |
| 167 | + stream >> d; |
| 168 | + dIt->set_value(d); |
162 | 169 | } else if (param_type_ == VT_STRING) {
|
163 | 170 | sIt->set_value(val);
|
164 | 171 | }
|
|
0 commit comments