Использую inih для парсинга ini файла. Обнаружилось то, что функция INIReader::GetReal(...) возвращает только целую часть вещественного числа. В комментариях написан пример значений переменных при отладке.
double INIReader::GetReal(const string& section, const string& name, double default_value) const
{
string valstr = Get(section, name, ""); // "1.033"
const char* value = valstr.c_str(); // "1.033"
char* end; // ".033"
double n = std::strtod(value, &end); // 1
return end > value ? n : default_value;
}
github code function
Компилятор:
gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
Функция strtod использует системно-зависимое значение символа разделителя дробной и целой части (decimal separator). И если в системе текущим разделителем является запятая (что характерно для русской локали), функция не сможет правильно распарсить строку, в которой в качестве разделителя использовалась точка. Именно это и происходят в вашем случае.
В качестве решения проблемы можно посоветовать использовать функцию strtod_l (_strtod_l для Windows) которая принимает третьим параметром локаль с правильным (ожидаемым) разделителем или можно взять готовую обёртку strtod (тут или тут) которая парсит вещественные числа с предположением, что разделителем является точка, вне зависимости от значения локали.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости