У меня была немного другая проблема, но она соответствует заголовку.
atof выглядел как округление до целой части, и это не было проблемой точности вывода.
Мое решение состояло в том, чтобы изменить региональные настройки моей установки Ubuntu.
Десятичные дроби были разделены запятой вместо точки.
попробуйте этот код (запятая вместо точки):
double latitude=atof("14718,5084");
std::cout <<"latitude test "<<latitude<< "\n";
если он выводит правильное число с плавающей запятой (может быть разделено точкой), вы должны изменить свои настройки локали на английский или работать с плавающими значениями запятых в своих данных (например, настройки немецкой локали)