Вы правильно конвертируете строку в число с плавающей точкой. Проблема в том, что числа с плавающей запятой не могут точно представлять все действительные числа. Прямое назначение:
float x = 1.7;
все равно будет иметь ошибку точности. Вот только как числа с плавающей запятой.
Обходной путь зависит от ваших потребностей. Несколько примеров: Если вам нужна большая точность для математических вычислений, вы можете использовать удвоения. Если вы пытаетесь сгенерировать вывод для пользователя, вы можете отформатировать вывод, чтобы он ограничивал количество цифр, отображаемых после десятичной точки. Если вы имеете дело с деньгами, вы можете конвертировать суммы в долларах с плавающей запятой в целые числа центов и выполнять все вычисления с использованием целых чисел, показывая только десятичную точку при выводе пользователю.