В стандартном С это делаетcя так (ширина поля и точность могут задаваться аргументом, тогда в формате * вместо числа):
Код
#include <stdio.h>
void pr(int digits, float value)
{
printf("%6.*f\n", digits, value);
}
int main()
{
pr(4, 1.2345f);
pr(3, 12.345f);
pr(2, 123.45f);
}
Из-под avr-gcc сейчас некуда залить для на терминлку выдать, но должно работать в максимальном форматтере (а с float всё равно только максимальный и нужен).
Так что можно нагородить что-то в духе
Код
printf("F = %6.*f Hz\n", value < 10 ? 4 : value < 100 ? 3 : 2, value);