Ответ 1
Указатель формата неверен. На странице printf()
man на моей машине:
0
Символ "ноль"0
', указывающий, что вместо заполнения пробела следует использовать нулевое дополнение. A-
'переопределяет'0
', если оба используются;Ширина поля: Дополнительная строка цифр, определяющая ширину поля; если выходная строка имеет меньше символов, чем ширина поля, она будет заполнена пустым слева (или справа, если указатель левой настройки был задан), чтобы составить ширину поля (обратите внимание, что начальный ноль является флагом, но встроенный нуль является частью ширины поля);
Точность: необязательный период,
.
', за которым следует дополнительная строка цифр, дающая точность, которая указывает количество цифр, которые будут отображаться после десятичной точки, для e и f, или максимальное количество символов для печати из строки; если строка цифр отсутствует, точность обрабатывается как нуль;
В вашем случае ваш формат будет %09.3f
:
#include <stdio.h>
int main(int argc, char **argv)
{
printf("%09.3f\n", 4917.24);
return 0;
}
Вывод:
$ make testapp
cc testapp.c -o testapp
$ ./testapp
04917.240
Обратите внимание, что этот ответ зависит от вашей встроенной системы, имеющей реализацию printf()
, стандартную для этих деталей - многие встроенные среды не имеют такой реализации.