Конвертировать char * в double без потери точности в c

Мне нужна помощь. Я должен конвертировать и хранить символ * в двойной или длинный двойной без потери точности.

Действительно, я пытался использовать методы strtold и atof (также strtold), но эти методы округляют значение.

Например:

char * key  ="39.7519707";

double ld =strtod((char*)key,NULL);

printf("%lf", ld);

отпечатки: 39.751971

но printf("%6.7f",ld) дает мне правильное значение, но я не могу сохранить в переменной.

1 ответ

Решение

Прежде всего, вам нужно только %f спецификатор формата для печати double,

Тогда вы не теряете точность, используя strtod(), выходное представление является проблемой с тем, как вы используете printf() с %f спецификатор формата.

Согласно C11 Глава § 7.21.6.1, fprintf()

[...] Если точность отсутствует, она принимается за 6;[...]

Далее, когда ты сделал

printf("%6.7f",ld);

точность стала 7, и она выдает значение, которое вы ожидаете увидеть.

Другие вопросы по тегам