Конвертировать 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, и она выдает значение, которое вы ожидаете увидеть.