Specifying maximum printf field width for numbers (truncating if necessary)?

Example from Bash command line:

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

Like many of my best ideas, the answer came to me while lying in bed, waiting to fall asleep (there’s not much else to do at that time than think).

Use modulus!

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

It’s not ideal because it can’t truncate from the left (e.g., 12 instead of 34), but it works for the main use-cases. For example:

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

If you want to truncate from the right you can convert your number to a string and then use the string field width specifier.

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