printf с ведущими нулями в C - PullRequest
42 голосов
/ 15 февраля 2011

У меня есть число с плавающей запятой, такое как 4917.24.Я хотел бы напечатать его, чтобы всегда иметь пять символов перед десятичной запятой, с ведущими нулями, а затем три цифры после десятичного знака.печатает *****.У меня правильный спецификатор формата?

1 Ответ

56 голосов
/ 15 февраля 2011

Ваш спецификатор формата неверен. Со страницы руководства printf() на моем компьютере:

0 Нулевой символ '0', указывающий, что следует использовать заполнение нулями, а не заполнение пробелами. A - переопределяет '0', если используются оба;

Ширина поля: Необязательная цифровая строка, указывающая ширина поля ; если выходная строка содержит меньше символов, чем ширина поля, она будет дополнена пробелами слева (или справа, если был задан индикатор регулировки слева), чтобы составить ширину поля (обратите внимание, что начальный ноль является флагом, но встроенный ноль является частью ширины поля);

Точность: необязательный период, '.', за которым следует необязательная цифровая строка, дающая точность, которая задает количество цифр после десятичной точки, для e * 1027 форматы * и 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(), которая совместима со стандартами для этих деталей - многие встроенные среды не не имеют такой реализации.

...