Указание максимальной ширины поля 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