'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