Указание максимальной ширины поля printf для чисел (при необходимости усечение)?

вы можете заменить строки

5 ответов


использовать модуль!

printf("%2d\n", 1234%10);   // for 4
printf("%2d\n", 1234%100);  // for 34

printf("%2x\n", 1234%16);   // for 2
printf("%2x\n", 1234%256);  // for d2

это не идеально, потому что он не может усечь слева (например,12 вместо 34), но это работает для основных случаев использования. Например:

// print a decimal ruler
for (int i=0; i<36; i++)
  printf("%d", i%10);

Если вы хотите усечь справа, вы можете преобразовать свой номер в строку, а затем использовать спецификатор ширины поля строки.

"%.3s".format(1234567.toString)

пример из командной строки Bash:

localhost ~$ printf "%.3s\n" $(printf "%03d"  1234)
123
localhost ~$ 

вы можете использовать snprintf для усечения справа

char buf[10];
static const int WIDTH_INCL_NULL = 3;

snprintf(buf, WIDTH_INCL_NULL, "%d", 1234); // buf will contain 12

почему не слева? единственное отличие - использовать простое деление:

printf("%2d", 1234/100); // you get 12