'sprintf': двойная точность в C
Рассмотрим:
double a = 0.0000005l;
char aa[50];
sprintf(aa, "%lf", a);
printf("%s", aa);
Output: s0.000000
В приведенном выше фрагменте кода переменная aa
может содержать только шестую десятичную точность. Я хотел бы получить выход типа "s0.0000005". Как достичь этого?
Ответы
Ответ 1
Из вашего вопроса кажется, что вы используете C99, поскольку вы использовали %lf
для double.
Для достижения желаемого результата замените:
sprintf(aa, "%lf", a);
с
sprintf(aa, "%0.7f", a);
Общий синтаксис "%A.B"
означает использование цифр B после десятичной точки. Значение A
более сложное, но можно прочитать здесь здесь.
Ответ 2
Вам нужно написать его как sprintf(aa, "%9.7lf", a)
Обратите внимание на http://en.wikipedia.org/wiki/Printf для получения более подробной информации о кодах формата.
Ответ 3
Проблема заключается в sprintf
sprintf(aa,"%lf",a);
% lf говорит, чтобы интерпретировать "a" как "длинный двойной" (16 байт), но на самом деле это "двойной" (8 байтов). Используйте это вместо:
sprintf(aa, "%f", a);
Подробнее здесь, на cplusplus.com